Django--view.py详解

1.http请求中产生的两个核心对象:
http请求:HttpRequest
http响应:HttpResponse
存在于Django.http 模块中

2.HttpRequest:
属性:
HttpRequest.scheme  #一个字符串,表示请求的方案(通常是http或者https)
HttpRequest.body    #一个字节字符串,表示原始HTTP请求的正文
HttpRequest.path    #一个字符串,表示请求的页面的完整路径,不包含域名
HttpRequest.method   #一个字符串,表示请求使用的HTTP方法,必须使用大写
HttpRequest.GET      #一个类似于字典的对象,包含HTTP GET的所有参数
HttpRequest.POST     #一个包含所有给定的HTTP POST参数的类字典对象,提供了包含表单数据的请求
HttpRequest.REQUEST  #一个将GET,POST属性结合起来的属性,但有特殊性,先查找POST属性,后查找GET属性,此属性在Django1.9就已经被移除,做了解
HttpRequest.COOKIES    #一个标准的python字典,包含所有cookie,键和值都为字符串
HttpRequest.FILES     #一个类似于字典的对象,包含所有的上传文件
HttpRequest.META      #一个标准的python字典,包含所有的HTTP头部
HttpRequest.user     #一个django.contrib.auth.models.User对象,代表当前登录的用户,如果访问的用户没有登录,则user将被初始化为django.contrib.auth.models.AnonymousUser的实例,可以通过user的in_authenticated()方法来辨别用户是否登录。
11
 
1
HttpRequest.scheme  #一个字符串,表示请求的方案(通常是http或者https)
2
HttpRequest.body    #一个字节字符串,表示原始HTTP请求的正文
3
HttpRequest.path    #一个字符串,表示请求的页面的完整路径,不包含域名
4
HttpRequest.method   #一个字符串,表示请求使用的HTTP方法,必须使用大写
5
HttpRequest.GET      #一个类似于字典的对象,包含HTTP GET的所有参数
6
HttpRequest.POST     #一个包含所有给定的HTTP POST参数的类字典对象,提供了包含表单数据的请求
7
HttpRequest.REQUEST  #一个将GET,POST属性结合起来的属性,但有特殊性,先查找POST属性,后查找GET属性,此属性在Django1.9就已经被移除,做了解
8
HttpRequest.COOKIES    #一个标准的python字典,包含所有cookie,键和值都为字符串
9
HttpRequest.FILES     #一个类似于字典的对象,包含所有的上传文件
10
HttpRequest.META      #一个标准的python字典,包含所有的HTTP头部
11
HttpRequest.user     #一个django.contrib.auth.models.User对象,代表当前登录的用户,如果访问的用户没有登录,则user将被初始化为django.contrib.auth.models.AnonymousUser的实例,可以通过user的in_authenticated()方法来辨别用户是否登录。
方法:
HttpRequest.get_host()#返回请求的原始主机
HttpRequest.get_full_path()#返回path,如果可以将加上查询字符串例如:"/music/bands/?print=true"
HttpRequest.read(size=None)
HttpRequest.readline()
HttpRequest.readlines()
HttpRequest.xreadlines()
HttpRequest.__iter__()
#这几个方法实现类文件的接口用于读取HttpRequest.示例。这使得可以用流的方式读#取进来的请求,一个常见的用例是使用迭代解析器处理大型XML有效载荷,而不是内存#中构造一个完整的XML树。
 
1
HttpRequest.get_host()#返回请求的原始主机
2
HttpRequest.get_full_path()#返回path,如果可以将加上查询字符串例如:"/music/bands/?print=true"
3
HttpRequest.read(size=None)
4
HttpRequest.readline()
5
HttpRequest.readlines()
6
HttpRequest.xreadlines()
7
HttpRequest.__iter__()
8
#这几个方法实现类文件的接口用于读取HttpRequest.示例。这使得可以用流的方式读#取进来的请求,一个常见的用例是使用迭代解析器处理大型XML有效载荷,而不是内存#中构造一个完整的XML树。
3.HttpResponse:
对于DjangoRequest对象来说,是由Django自动创建,而HttpResponse对象就必须我们自己创建。每个View方法必须返回一个HttpResponse对象。
在view.py中使用的是如下返回方式:
既然必须返回HttpResponse对象,那么为什么这里只返回rander对象?我们可以查看rander的具体构造,
可以看到在rander函数中返回的其实也是一个HttpResponse对象,所以可以使用简便的render方法来代替HttpResponse的返回。

在HttpReponse对象上扩展的常用方法:render,render_to_response,redirect  这三个方法都在django.shortcuts 中(from django.shortcuts import render,render_to_response,redirect)
其中render_to_response和render效果一样但更简洁。
示例:

HttpResponse子类(部分):
Class Description
HttpResopnseRedirect 构造函数接受单个参数,重定向到URL,可以是全URL,或者相对URL。注意:这里将返回HTTP状态码302
HttpResponsePermanentRedirect 同HttpResponseRedirect一样,但是返回永久重定向,HTTP状态吗301
HttpResponseNotFound 返回404status code
JsonResponse 返回Json字符串

4.locals()方法:
在render方法中以字典的形式传递参数时,如果所要传递的字典值太多,自己构造的话就会太复杂且代码可读性也不太好。这时就可使用locals()方法,其会将函数中的所有变量传递给模板。








猜你喜欢

转载自www.cnblogs.com/hskullbk/p/9217266.html