Django之视图函数总结

HttpRequest与HttpResponse

http请求中产生两个核心对象:

HttpRequest对象:用户请求相关的所有信息(对象)

HttpResponse对象:响应字符串

HttpRequest对象的属性和方法:

request.path       # 获取访问文件路径

request.method   #获取请求中使用的HTTP方式(POST/GET)

request.body      #含所有请求体信息 是bytes类型

request.GET        #GET请求的数据(类字典对象)  请求头中的url中?后面拿值
request.POST     # POST请求的数据(类字典对象) 请求体里拿值 request.COOKIES     #包含所有cookies的标准Python字典对象;keys和values都是字符串。 request.FILES: 包含所有上传文件的类字典对象;FILES中的每一个Key都是<input type="file" name="" />标签中
    name属性的值,FILES中的每一个value同时也是一个标准的python字典对象,包含下面三个Keys:      filename: 上传文件名,用字符串表示
     content_type: 上传文件的Content Type
     content: 上传文件的原始内容 request.user: 是一个django.contrib.auth.models.User对象,代表当前登陆的用户。如果访问用户当前
    没有登陆,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。你
    可以通过user的is_authenticated()方法来辨别用户是否登陆:
    if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware
    时该属性才可用 request.session:    唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用 request.GET.get('name')    拿到GET请求里name的值 如果某个键对应有多个值,则不能直接用get取值,需要用getlist,如: request.POST.getlist("hobby") 请求url:http://127.0.0.1:8000/index.html/23?a=1 request.path : 请求路径
request.path结果为:/index.html/23 request.get_full_path()
request.get_full_path()结果为:/index.html/23?a=1 键值对的值是多个的时候,比如checkbox类型的input标签,select标签,需要用:
request.POST.getlist("hobby")

  

  

HttpResponse对象的属性和方法:

对于HttpRequest对象来说,是由django自动创建的,但是,HttpResponse对象就必须我们自己创建。每个view请求处理方法必须返回一个HttpResponse对象。
HttpResponse类在django.http.HttpResponse 在HttpResponse对象上扩展的常用方法: 页面渲染:(返回一个页面)
render()(推荐)
render_to_response() 页面跳转:()
redirect("路径") locals():可以直接将函数中所有的变量传给模板

  

render 函数

render方法主要是将从服务器提取的数据,填充到模板中,然后将渲染后的html静态文件返回给浏览器,这里一定要注意:render渲染的是模板。

render方法的作用:将指定页面渲染后返回给浏览器。

数据主要有两部分:

给定的模板:html文件

给定的上下文字典:需要填充到html文件的变量

render()的格式:

render(request, template_name[, context])
参数:
request: 用于生成响应的请求对象。 template_name:要使用的模板的完整名称,可选的参数 context:添加到模板上下文的一个字典。默认是一个空字典。如果字典中的某个值是可调用的,视图将在渲染模板之前调用它。 content_type:生成的文档要使用的MIME类型。默认为DEFAULT_CONTENT_TYPE 设置的值。 status:响应的状态码。默认为200。

 

使用示例 

urls.py

from django.contrib import admin
from django.urls import path
from blog import views urlpatterns = [
path('show_time/',views.show_time),
]

view.py

from django.shortcuts import render,HttpResponse
import time def show_time(req):
t=time.ctime()
return render(req,"index.html",{"time":t})

html文件

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Now {{ time }}</h1>
</body>
</html>

巧用locals()

我们可以把变量填充给html文件,如果变量很多,我们在键值对后面添加就会很麻烦。

所以我们把所有变量都封装到locals下,包括request下的属性!!!

注意:在html文件中,使用的变量名必须和view.py文件下的对应视图函数里面的变量名相同才能使用。

现在修改view.py文件下,

retuen render(req,"index.html",{"time":t})

  

return render(req,"index.html",locals())

  

redirect 函数

参数可以是:

一个模型:将调用模型的get_absolute_url() 函数
一个视图,可以带有参数:将使用urlresolvers.reverse 来反向解析名称
一个绝对的或相对的URL,将原封不动的作为重定向的位置。
默认返回一个临时的重定向;传递permanent=True 可以返回一个永久的重定向。

  

传递一个对象
将调用get_absolute_url() 方法来获取重定向的URL:
from django.shortcuts import redirect
def my_view(request):
...
object = MyModel.objects.get(...)
return redirect(object) 传递一个视图的名称
可以带有位置参数和关键字参数;将使用reverse() 方法反向解析URL: 
def my_view(request):
...
return redirect('some-view-name', foo='bar') 传递要重定向的一个硬编码的URL
def my_view(request):
...
return redirect('/some/url/') 也可以是一个完整的URL:
def my_view(request):
...
return redirect('http://example.com/') 默认情况下,redirect() 返回一个临时重定向。以上所有的形式都接收一个permanent 参数;如果设置为True,将返回一个永久的重定向:
def my_view(request):
...
object = MyModel.objects.get(...)
return redirect(object, permanent=True) 

  

跳转应用

register.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <form action="http://127.0.0.1:8080/register.html/" method="get" >
<p>文本框:<input type="text" name="username" placeholder="姓名"></p>
<p>密码框:<input type="password" name="passwd" placeholder=" 密码"></p>
<p>单选框:男<input type="radio" name="gender" value="men">女<input type="radio" name="gender" value="women"></p>
<p>复选框:音乐<input type="checkbox" name="hobby" value="music">电影<input type="checkbox" name="hobby" value="movice"></p>
<p>下拉输入项:
<select name="生日">
<option value=""></option>
<option value=""></option>
<option value=""></option>
</select>
</p>
<p>提交按钮:<input type="submit"></p>
<p>重置按钮:<input type="reset"></p> </form>
</body>
</html>

login.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form>
<p>用户名:<input type="text"></p>
<p>密码:<input type="password"></p>
<p><input type="submit" value="登陆"></p>
</form>
</body>
</html>

urls.py

from django.contrib import admin
from django.urls import path
from blog import views urlpatterns = [
path("register.html/",views.register),
path("login/",views.login),
]

view.py

from django.shortcuts import render,HttpResponse,redirect

def register(req):
user=req.GET.get('username')
if user=="admin":
return redirect("/login/")
return render(req,"register.html") def login(req):
return render(req,"login.html")

现在访问http://127.0.0.1:8080/register.html

提交成功后进行判读

如果用户为admin

则跳转到http://127.0.0.1:8080/login/

如果用户名不为admin

则重新返回这个页面

第一,render返回一个登陆成功后的页面,刷新该页面将回复到跳转前页面。而redirect则不会.

第二,如果页面需要模板语言渲染,需要的将数据库的数据加载到html,那么render方法则不会显示这一部分,render返回一个登陆成功页面,不会经过url路由分发系统,
也就是说,不会执行跳转后url的视图函数。这样,返回的页面渲染不成功;而redirect是跳转到指定页面,当登陆成功后,会在url路由系统进行匹配,如果有存在的映射
函数,就会执行对应的映射函数。

  

Django之视图函数总结的更多相关文章

  1. django views视图函数返回值 return redirect httpresponse总结

    django views视图函数返回值 return redirect  render httpresponse总结

  2. Django 定义视图函数

    Django 定义视图函数 一.接收内容及文件处理 1.接收分类 # 获取数据 request.GET # 提交数据 request.POST # 获取文件 request.FILES 2.check ...

  3. 03 Django之视图函数

    一.Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python函数(类),它接受WEB请求并返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误, ...

  4. django的视图函数

    一.视图函数view 视图函数是接收一个请求(request对象),并返回响应的函数 1. HttpResponse响应请求 这个方法是返回字符串一类的,可以识别标签 2. render响应请求 re ...

  5. Django restframe 视图函数以及ModelSerializer的使用

    建立model数据库 from django.db import models __all__ = ['Book', 'Publisher', 'Author'] # Create your mode ...

  6. Django的视图函数和路由系统中一些没有用过的小点

    1.request对象 print("返回用户访问的url,但是不包括域名",request.path_info) print("返回请求的方法,全大写",re ...

  7. django views视图函数

    Django views.py视图文件 一. 创建views.py文件,在工程文件夹根目录创建views.py视图文件,其实任意文件名都可以,使用views是为了遵循传统. 注:所有的views函数都 ...

  8. Django中非视图函数获取用户对象

    今天遇到了一个问题:在Django中怎么从非视图函数中获取用户对象?怎么保证不同的请求获取到不同的用户对象? 平常我们获取用户对象使用的是: request.user 不得不说,这确实很方便. 但是, ...

  9. django中视图函数的FBV和CBV

    1.什么是FBV和CBV FBV是指视图函数以普通函数的形式:CBV是指视图函数以类的方式. 2.普通FBV形式 def index(request): return HttpResponse('in ...

随机推荐

  1. <<人月神话>>阅读体会(一)

    第一次听说人月神话还是在大一上学期的导论课那会儿,那会儿好像就已经确定了自己要学软件,于是就去问王建民老师能不能给我推荐几本软件工程方面的书,我想要提前自己学学,以为老师会给我推荐一些某种语言类的学习 ...

  2. ORM 对象关系映射

    ORM (object relation mapping) 就是将对象数据转换为sql语句并执行 对象关系映射框架 orm 需要做的事情 1 生成创建表的语句 2 插入数据的语句 3 删除数据的语句 ...

  3. C++ 解析Json——jsoncpp(转)

    原文:https://www.cnblogs.com/liaocheng/p/4243731.html JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,和 ...

  4. LeetCode(85):最大矩形

    Hard! 题目描述: 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积. 示例: 输入: [ ["1","0",&quo ...

  5. Practical Web Penettation Testing (the first one Mutillidae 大黄蜂 之二)

    1.how  to use dpkg cmmand first it can be used for list all software , dpkg -l  (由于kali linux 没有启动所以 ...

  6. UEFI rootkit 工具LoJax可以感染电脑主板(mainboard)

    1.UEFI(Unified Extensible Firmware Interface)统一扩展接口,UEFI rootkit是以在UEFI中植入rootkit ,18年9月份ESET首次公开了境外 ...

  7. C语言访问一个链接

    示例代码1: # include <Windows.h> int main(){ system("start http://""www.baidu.com&q ...

  8. Loadrunner常用目录、组成部分及负载测试流程

    常用目录 bin:存放一些可执行程序 classes:可能用到的jar包 My Template:存放一些自己创建的模板 include:头文件(可以编写自定义函数,保存成.h的头文件形式并放在这个目 ...

  9. java使用POI解析2007以上的Excel表格

    来自http://hao0610.iteye.com/blog/1160678 使用poi来解析Excel的xls和xlsx. 解析xls: package xls; import java.io.F ...

  10. python 内置数据类型之字符串

    1.3 字符串 字符串本身就是一个有序(从左至右)的字符的集合.是序列这种类型的一种,后面还要学习列表与元组. 在这一节中,需要了解字符串的定义,特殊字符,转义与抑制转义:字符串基本操作.格式化等. ...