Django 是围绕着 Request 与 response 进行处理,也就是无外乎“求”与“应”。当请求一个页面时,Django 把请求的 metadata 数据包装成一个 HttpRequest 对象,然后 Django 加载合适的 view 方法,把这个 HttpRequest 对象作为第一个参数传给 view 方法。任何 view 方法都应该返回一个 HttpResponse 对象。
每当一个用户请求发送过来,Django将HTTP数据包中的相关内容,打包成为一个HttpRequest对象,并传递给每个视图函数作为第一位置参数,也就是request,供我们调用。
HttpRequest对象中包含了非常多的重要的信息和数据,应该熟练掌握它。
类定义:class HttpRequest[source]
HttpRequest对象的大部分属性是只读的。
1. HttpRequest.scheme
字符串类型,表示请求的协议种类,'http'或'https'。
2. HttpRequest.body
bytes类型,表示原始HTTP请求的正文。它对于处理非HTML形式的数据非常有用:二进制图像、XML等。如果要处理常规的表单数据,应该使用HttpRequest.POST。
还可以使用类似读写文件的方式从HttpRequest中读取数据,参见HttpRequest.read()。
3. HttpRequest.path
字符串类型,表示当前请求页面的完整路径,但是不包括协议名和域名。例如:"/music/bands/the_beatles/"。这个属性,常被用于我们进行某项操作时,如果不通过,返回用户先前浏览的页面。非常有用!
4. HttpRequest.path_info
在某些Web服务器配置下,主机名后的URL部分被分成脚本前缀部分和路径信息部分。path_info 属性将始终包含路径信息部分,不论使用的Web服务器是什么。使用它代替path可以让代码在测试和开发环境中更容易地切换。
例如,如果应用的WSGIScriptAlias设置为/minfo,那么HttpRequest.path等于/music/bands/the_beatles/ ,而HttpRequest.path_info为/minfo/music/bands/the_beatles/。
5. HttpRequest.method
字符串类型,表示请求使用的HTTP方法。默认为大写。 像这样:
if request.method == 'GET':
do_something()
elif request.method == 'POST':
do_something_else()
通过这个属性来判断请求的方法,然后根据请求的方法不同,在视图中执行不同的代码。
6. HttpRequest.encoding
字符串类型,表示提交的数据的编码方式(如果为None 则表示使用DEFAULT_CHARSET设置)。 这个属性是可写的,可以通过修改它来改变表单数据的编码。任何随后的属性访问(例如GET或POST)将使用新的编码方式。
7. HttpRequest.content_type
Django1.10中新增。表示从CONTENT_TYPE头解析的请求的MIME类型。
8. HttpRequest.content_params
Django 1.10中新增。包含在CONTENT_TYPE标题中的键/值参数字典。
9 HttpRequest.GET
一个类似于字典的对象,包含GET请求中的所有参数。 详情参考QueryDict文档。
10. HttpRequest.POST
一个包含所有POST请求的参数,以及包含表单数据的字典。 详情请参考QueryDict文档。 如果需要访问请求中的原始或非表单数据,可以使用HttpRequest.body属性。
注意:请使用if request.method == "POST"来判断一个请求是否POST类型,而不要使用if request.POST。
POST中不包含上传文件的数据。
11. HttpRequest.COOKIES
包含所有Cookie信息的字典。 键和值都为字符串。可以类似字典类型的方式,在cookie中读写数据,但是注意cookie是不安全的,因此,不要写敏感重要的信息。
12. HttpRequest.FILES
一个类似于字典的对象,包含所有上传的文件数据。 FILES中的每个键为中的name属性值。 FILES中的每个值是一个UploadedFile。
要在Django中实现文件上传,就要靠这个属性!
如果请求方法是POST且请求的