Django View
Django Request and response objects
一、概览
- Django使用请求Request和响应Response来给整个系统传递状态
- 当用户请求一个页面时,Django创建一个包含元数据和请求内容的HttpRequest对象。然后Django加载适当的视图,HttpRequest对象作为视图函数的第一个参数,每个视图负责返回一个HttpResponse对象。
二、HttpRequest 对象
1、属性
- HttpRequest.scheme
- 返回请求协议的名称,通常是http或是https
- HttpRequest.body
- 返回字节格式的原始HTTP请求内容,通常用于二进制图像、XML等格式的文件
- HttpRequest.path
- 返回请求的全路径,例如
"/music/bands/the_beatles/"
- 返回请求的全路径,例如
- HttpRequest.method
- 返回请求调用的HTTP方法,通常是’GET’或是’POST’
- HttpRequest.GET
- 包含所有给定HTTP GET参数的类似字典的对象。
- HttpRequest.POST
- 接收表单提交的数据,返回一个类似字典的对象,包含所有给定的HTTP POST参数。
- HttpRequest.COOKIES
- 包含所有COOKIES的字典,键和值是字符串。
- HttpRequest.FILES
- 包含所有上传文件的类似字典的对象。文件中的每一个键都是
的名称,文件中的每个值是一个uploadedFile。<input type="file" name="" />
- 包含所有上传文件的类似字典的对象。文件中的每一个键都是
- HttpRequest.META
- 包含所有可用的HTTP头的字典,通常包含以下内容:
CONTENT_LENGTH – 请求体的长度(以字符串形式返回) CONTENT_TYPE – 请求体的 MIME 类型 HTTP_ACCEPT – 响应可以接收的文本类型 HTTP_ACCEPT_ENCODING – 响应可以接收的编码方式 HTTP_ACCEPT_LANGUAGE – 响应可以接收的语言 HTTP_HOST – 客户端发来的HTTP主机头 HTTP_REFERER – 返回引用页 HTTP_USER_AGENT – 客户端的用户代理(字符串格式) QUERY_STRING – 查询字符串,作为独立的(解析)字符串 REMOTE_ADDR – 客户端IP地址 REMOTE_HOST – 客户端主机名 REMOTE_USER – 由Web服务器验证的用户 REQUEST_METHOD – 返回请求方法的字符串,例如"GET"或者"POST". SERVER_NAME – 服务端主机名 SERVER_PORT – 服务端端口(字符串格式)
- 其他不常用的属性
- HttpRequest.path_info
- HttpRequest.encoding
- HttpRequest.content_type
- HttpRequest.content_params
- HttpRequest.resolver_match
2、由application设置的属性
- HttpRequest.current_app
- 该属性的值将作为url模板标签reverse()方法的参数,并用于当前的app
- HttpRequest.urlconf
- 它将覆盖ROOT_URLCONF的设置,同时作为根URLConf映射用于当前的请求
3、由middleware设置的属性
- HttpRequest.session
- 来自于 CurrentSiteMiddleware:可读可写,表示当前session,是一个类似于字典的对象
- HttpRequest.site
- 来自于 CurrentSiteMiddleware:get_current_site()的返回值,表示当前站点,通常是Site或者是RequestSite的对象
- HttpRequest.user
- 来自于AuthenticationMiddleware:一个AUTH_USER_MODEL对象,表示当前登录的用户,如果用户未登录则会被默认为 AnonymousUser(匿名用户)
4、方法
- HttpRequest.get_host()[source]
- 返回从HTTP_X_FORWARDED_HOST和HTTP_HOST的信息头获取信息的请求源主机
- HttpRequest.get_port()[source]
- 返回从HTTP_X_FORWARDED_PORT和SERVER_PORT的元变量中获取到的请求源端口
- HttpRequest.get_full_path()[source]
- 返回路径,包括追加的查询字符串,例如
Example: "/music/bands/the_beatles/?print=true"
- 返回路径,包括追加的查询字符串,例如
- 其他不常用方法
- HttpRequest.build_absolute_uri(location)[source]
- HttpRequest.get_signed_cookie(key, default=RAISE_ERROR, salt=”, max_age=None)[source]
- HttpRequest.is_secure()[source]
- HttpRequest.is_ajax()[source]
- HttpRequest.read(size=None)[source]
- HttpRequest.readline()[source]
- HttpRequest.readlines()[source]
- HttpRequest.xreadlines()[source]
- HttpRequest.__iter__()
三、QueryDict 对象
1、概述
对HttpRequest对象而言,GET和POST是django.http.QueryDict的实例,django.http.QueryDict的实例是用于处理相同key下包含多个values的定制类,它的意义在于有一些HTML表单元素,特别是类似于
<select multiple>
这种便签就是典型的同一个key传递多个values的情况
2、方法
- QueryDict.__init__(query_string=None, mutable=False, encoding=None)[source]
- 基于query_string实例化QueryDict对象
- QueryDict.__getitem__(key)
- 返回给定key的value。如果key有多个values值,则返回最后一个value。如果key不存在则抛出django.utils.datastructures.MultiValueDictKeyError的异常
- QueryDict.__setitem__(key, value)[source]
- 将给定的key赋值
- QueryDict.__contains__(key)
- 如果给定的key设置了响应的value则返回True
- QueryDict.get(key, default=None)
- 用法类似于__getitem__(),区别在于如果给定的key不存在则返回default设置的value,而不会抛出异常
- QueryDict.setdefault(key, default=None)[source]
- 类似于Python中字典数据类型的dict.setdefault()方法,区别在于其内部实际调用了__setitem__()方法
- QueryDict.update(other_dict)
- 参数要求是一个QueryDict或者是dictionary,类似于python中字典数据类型的dict.update(),区别在于是将值追加在后面,而不是取代原值。
- QueryDict.items()
- QueryDict.iteritems()
- QueryDict.iterlists()
- QueryDict.values()
- QueryDict.itervalues()
- QueryDict.copy()[source]
- QueryDict.getlist(key, default=None)
- QueryDict.setlist(key, list_)[source]
- QueryDict.appendlist(key, item)[source]
- QueryDict.setlistdefault(key, default_list=None)[source]
- QueryDict.lists()
- QueryDict.pop(key)[source]
- QueryDict.popitem()[source]
- QueryDict.dict()
- QueryDict.urlencode(safe=None)[source]
四、HttpResponse 对象
1、用法
- Passing strings
- Passing iterators
- Setting header fields
- Telling the browser to treat the response as a file attachment
2、属性
3、方法
4、HttpResponse 子类
五、JsonResponse 对象
1、用法
- Serializing non-dictionary objects
- Changing the default JSON encoder
六、StreamingHttpResponse 对象
1、属性
七、FileResponse 对象
八、官方链接
https://docs.djangoproject.com/en/1.11/ref/request-response/