目录
request对象方法
request对象介绍
请求相关的常用值
属性介绍
获取数据的方法
request对象方法
当一个页面被请求时,Django就会创建一个包含本次请求原信息的HttpRequest对象.
Django会将这个对象自动传值给响应的视图函数,一般视图函数约定俗成低使用request参数承接这个对象.
request对象介绍
后端接收到来自前端的信息几乎都来自于request中, 浏览器提交的请求分别为GET,POST两种. 所以在视图函数中, 对于不同的请求, 我们应该做出不同的响应,
那么如何分辨是什么请求呢? 这就需要对request进行操作了
在试图函数中使用Debug模式运行.观察一下reauest对象
from django.shortcuts import render, HttpResponse, redirect
def index(request):
print(request)
return HttpResponse('6666')
结果为WSGIRequest 由wsgiref模块封装之后的对象,
请求相关的常用值
- path-info 返回用户访问url, 不包括域名
- method 请求中使用的HTTP方法字符串, 全大写表示.
- GET 包含了所有含有HTTP GET参数的类字典对象
- POST 包含了所有HTTP POST参数的类字典对象
- body 请求体, byte类型, request.POST的数据就是从body中提取的
属性介绍
所有的属性应该被认为是只读的,除非另有说明
request.META
request.META获取的是一个标准的python字典, 它包含了所有的HTTP首部,具体的头部信息取决于客户端和服务器
1 CONTENT_LENGTH —— 请求的正文的长度(是一个字符串)。
2 CONTENT_TYPE —— 请求的正文的MIME 类型。
3 HTTP_ACCEPT —— 响应可接收的Content-Type。
4 HTTP_ACCEPT_ENCODING —— 响应可接收的编码。
5 HTTP_ACCEPT_LANGUAGE —— 响应可接收的语言。
6 HTTP_HOST —— 客服端发送的HTTP Host 头部。
7HTTP_REFERER —— Referring 页面。
8 HTTP_USER_AGENT —— 客户端的user-agent 字符串。
9 QUERY_STRING —— 单个字符串形式的查询字符串(未解析过的形式)。
10 REMOTE_ADDR —— 客户端的IP 地址。
11 REMOTE_HOST —— 客户端的主机名。
12 REMOTE_USER —— 服务器认证后的用户。
13 REQUEST_METHOD —— 一个字符串,例如"GET" 或"POST"。
14 SERVER_NAME —— 服务器的主机名。
15 SE0RVER_PORT —— 服务器的端口(是一个字符串)
从上边的例子中考一看到, 除了COTENT_LENGTH 和CONTENT_TYPE之外, 请求中的任何HTTP首部转换为META时,都会将所有字母大写并将链接符替换成下划线之后加上HTTP_前缀.
所以应该叫做X_Bender 的头部将转换成,META中的HTTP_XBENDER键.
获取请求的源主机: Request.get_host()
request.scheme>>> 请求的方式, 即http 或者https
request.path>>> 请求路径[相对路径],一个字符串表示请求的路径组件(不含域名)
eg: “/music/bands/the_beatles/”
获取完整路径(包括参数):HttprRquest.get_full_path()
获取绝对url:HttpRequest.bulid-absolute_url(location)此参数默认为完整路径
request.encoding
一个字符串. 表示提交数据的编码方式[如果为None 则表示使用DEFAULT_CHARSETde设置, 默认为'utf-8'']
这个属性是可写的, 你可以修改它;来修改访问表单数据使用的编码.接下来对属性的任何访问都将使用新的encoding值. 如果你知道表单数据的编码不是DEFAULT_charset,就是用它.
request.session
request.session获取的是一个类似于字典的对象, 可以进行读取写入操作,常用来保存一些数据来实现会话跟踪技术, 因为HTTP的特性之一就是无状态不连续的协议., 如果想让服务器记住当前的访问对象就需要记录请求者来的一些信息来达到目的
# 设置session
request.session["name"] = "root"
# 获取session
name = request.session["name"]
django会默认为session使用序列化所以session不能直接存储对象, 可以在settings中添加SESSION_SERIALIZER = "django.contrib.sessions.serializers.PickleSerializer"
request.COOKIES
一个标准的python字典, 包含所有的cookie,键和值都为字符串
与session类似了区别是cookies数据是保存在客户端的, session数据是保存在服务端的, 相对而言session更安全, cookies在不同的浏览器上保存数据的大小限制也不同, 一般不超过4kb[cookie工作原理类似于给客户端们打了通行证,每个客户端一个,无论谁访问都必须携带自己的通行证, 这样服务端就能从通行证上确认客户身份了. ]
# 设置cookies
response.set_cookie('name','root')
# 设置加密cookies
response.set_cookie('passsword','123456',salt='@#$!%^&')
# 获取cookie
request.COOKIES.get("name")
# 获取加密的cookie
request.get_signed_cookie("password",salt="@#$!%^&")
request.method
一个字符串,表示请求使用的HTTP方法, 必须要使用大写, POST/GET
获取数据的方法
request.body
请求的主体,返回的是一个字符串, 代表请求报文的主体
在处理非HTTP形式的人报文时非常有用, 例如二进制图片,XML,Json等. 但是 如果要处理表单数据的时候,推荐还是使用Request.POST. 另外, 我们还可以使用python的类文件方法去操作它, 详情参考Request.read()
request.data
请求的数据部分, 返回的是一个字典对象, 除此之外,与request.body是很类似的
request.POST
一个类似于字典的对象, 如果请求中包含表单数据
获取post方式表单中提交的数据
request.POST["username"]
request.POST.get("username")
request.POST.getlist("username")
注意: get方法只能获取表单中username的值的列表中的最后一个, 得到的是一个字符串类型:
getlist 方法获取的才是完整的列表.
POST 请求可以带有空的POST字典---- 如果通过HTTP POST方法发送一个表单, 但是表单中没有任何数据, QueryDict对象依然会被创建,因此不该使用if request.POST来检查使用的是否时POST方法, 应该使用if request.method == 'POST"
如果使用POST上传文件的话, 文件信息将包含在FILES属性中
request.GET
一个类似字典的对象, 包含了HTTP GET的所有参数
获取url路径中?后提交的数据,不一定只获取GET方式提交的数据, 也可以是获取POST
request.GET["username"]
request.GET.get("username")
request.GET.getlist("username")
注意 get方法只能获取表单中username的值的最后一个, 得到的是一个字符串类型. getlist放放风获取的才是完整的列表.
request.FILE
一个类似于字典的对象, 包含所有的上传文件信息, FiLES中的每个键为<
input type="file" name="" />
中的name,值则为对应的数据。
注意, FILES只有在请求的方法为POST且提交的<form>带有enctype="multipart/form-data"
的情况下才会包含数据, 否则FILS将为一个空的类似于字典的对象.
-