Django--request 对象

目录

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将为一个空的类似于字典的对象. 

-

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值