python测试开发django-98.views视图函数中request参数详解前⾔
django 在 views 视图函数中会传⼀个request参数,request 是 HttpRequest 的实例对象。
当请求⼀个页⾯时,Django 创建⼀个HttpRequest对象,其中包含有关请求的元数据。然后 Django 加载适当的视图,将传递HttpRequest 给视图函数的第⼀个参数。
每个视图负责返回⼀个HttpResponse对象。
HttpRequest 属性
HttpRequest 的⼀些属性和作⽤
属性说明
HttpRequest.scheme请求的协议,⼀般为http或者https
HttpRequest.body作为字节字符串的原始 HTTP 请求正⽂
HttpRequest.path表⽰请求页⾯的完整路径的字符串,不包括⽅案或域。例⼦: "/music/bands/the_beatles/" HttpRequest.path_info获取具有 URL 扩展名的资源的附加路径信息。相对于
HttpRequest.path,使⽤该⽅法便于移植。hod获取该请求的⽅法GET/,⽐如:hod == 'GET'
HttpRequest.POST返回⼀个 querydict ,该对象包含了所有的HTTP POST参数,通过表单上传的所有字符都会保存在该属性中。
HttpRequest.COOKIES返回⼀个包含了所有cookies的字典。键和值是字符串。
HttpRequest.FILES返回⼀个包含了所有的上传⽂件的 querydict 对象。通过表单所上传的所有⽂件都会保存在该属性中。 key 的值是input标签中name属性的值,value的值是⼀个UploadedFile对象
HttpRequest.META返回⼀个包含了所有http头部信息的字典
HttpRequest.current_app该url模板标签将使⽤它的值作为current_app 参数reverse()。
HttpRequest.urlconf这将⽤作当前请求的根 URLconf,覆盖ROOT_URLCONF设置
HttpRequest.session中间件属性来⾃SessionMiddleware:⼀个可读可写的类似字典的对象,表⽰当前会话。HttpRequest.site中间件属性来⾃CurrentSiteMiddleware: 代表当前站点的实例Site或 RequestSite作为返回的实例
get_current_site()。
HttpRequest.user中间件属性,表⽰当前登录的⽤户。来⾃AuthenticationMiddleware:AUTH_USER_MODEL代表当前登录⽤户的实例。
request.user
来⾃AuthenticationMiddleware:AUTH_USER_MODEL代表当前登录⽤户的实例。如果⽤户当前未登录,user则将设置为的实例AnonymousUser。
你可以⽤区分它们 is_authenticated,像这样:
if request.user.is_authenticated:
... # Do something for logged-in users.
else:
... # Do something for anonymous users.
HttpRequest.user实际上是由⼀个定义在dels 中的 user model 类所创建的对象。
该类有许多字段,属性和⽅法,常⽤字段:
字段说明
username⽤户名
first_name
last_name
email邮箱
password密码
groups
user_permissions
is_staff布尔值,标明⽤户是否可以访问admin页⾯
is_superuser是否超级管理员admin⽤户
last_login上⼀次登陆时间
date_joined⽤户创建时间
字段说明
属性:
is_authenticated 布尔值,标志着⽤户是否已认证。在django1.10之前,没有该属性,但有与该属性同名的⽅法。⽅法:
⽅法说明作⽤
_username()注意:⽅法的圆括号在templates标签中必需省略!!获取username。尽量使⽤该
⽅法来代替使⽤username字段
_full_name()注意:⽅法的圆括号在templates标签中必需省略!!获取first_name和last_name HttpRequest.user.short_name()注意:⽅法的圆括号在templates标签中必需省略!!获取first_name HttpRequest.user.set_password(raw_password)注意:该⽅法⽆法在template标签中使⽤!!设置密码
HttpRequest.user.check_password(raw_password)注意:该⽅法⽆法在template标签中使⽤!!如果raw_password与⽤户密码相
等,则返回True
HttpRequest.META
包含所有可⽤ HTTP 标头的字典。可⽤的标头取决于客户端和服务器,但这⾥有⼀些⽰例:
属性说明
CONTENT_LENGTH请求正⽂的长度(作为字符串)。
CONTENT_TYPE请求正⽂的 MIME 类型。
HTTP_ACCEPT可接受的响应内容类型。
HTTP_ACCEPT_ENCODING可接受的响应编码。
HTTP_ACCEPT_LANGUAGE可接受的响应语⾔。
HTTP_HOST客户端发送的 HTTP Host 头。
HTTP_REFERER引⽤页⾯,如果有的话。
HTTP_USER_AGENT客户端的⽤户代理字符串。
QUERY_STRING查询字符串,作为单个(未解析的)字符串。
REMOTE_ADDR客户端的IP地址。
REMOTE_HOST客户端的主机名。
REMOTE_USER Web 服务器验证的⽤户(如果有)。
REQUEST_METHOD⼀个字符串,例如"GET"or "POST"。
SERVER_NAME服务器的主机名。
SERVER_PORT服务器的端⼝(作为字符串)。
除了上⾯给出的CONTENT_LENGTHandCONTENT_TYPE之外,META通过将所有字符转换为⼤写,将所有连字符替换为下划线并HTTP_在名称中添加前缀,请求中的任何 HTTP 标头都会转换为键。因此,例如,调⽤的标头X-Bender将映射到METAkey
HTTP_X_BENDER。
请注意,runserver删除名称中带有下划线的所有标题,因此您不会在META. 这可以防⽌基于下划线和破折号之间的歧义的标题欺骗,两者都被规范化为 WSGI 环境变量中的下划线。它与 Nginx 和 Apache 2.4+ 等 Web 服务器的⾏为相匹配。
HttpRequest ⽅法
<_host() :使⽤来⾃HTTP_X_FORWARDED_HOST(如果USE_X_FORWARDED_HOST已启⽤)和HTTP_HOST标头中的信息以该顺序返回请求的原始主机
<_port() :使⽤来⾃HTTP_X_FORWARDED_PORT(如果USE_X_FORWARDED_PORT已启⽤)和SERVER_PORT META变量的信息,按该顺序返回请求的起始端⼝。
<_full_path():返回path,加上附加的查询字符串(如果适⽤)。例⼦: "/music/bands/the_beatles/?print=true" _full_path_info(): Django 2.1 中的新功能。喜欢get_full_path(),但使⽤path_info代替 path。例⼦:
"/minfo/music/bands/the_beatles/?print=true"
HttpRequest.build_absolute_uri( location=None ) 返回的绝对 URI 形式location。如果未提供位置,则位置将设置为
<_full_path()。
如果位置已经是绝对 URI,则不会更改。否则,绝对 URI 将使⽤此请求中可⽤的服务器变量构建。例如:
>>> request.build_absolute_uri()
'example/music/bands/the_beatles/?print=true'
>>> request.build_absolute_uri('/bands/')
'example/bands/'
>>> request.build_absolute_uri('example2/bands/')
'example2/bands/'
<_signed_cookie( key , default=RAISE_ERROR , salt='' , max_age=None ): 返回签名 cookie 的 cookie 值,或者signing.BadSignature如果签名不再有效则引发异常。如果您提供default参数,则异常将被抑制,⽽将返回默认值。
可选salt参数可⽤于提供额外保护,防⽌对您的密钥进⾏暴⼒破解。如果提供,max_age将根据附加到 cookie 值的签名时间戳检查该参数,以确保 cookie 不超过 max_age秒。
例如:
>>> _signed_cookie('name')
'Tony'
>>> _signed_cookie('name', salt='name-salt')
'Tony' # assuming cookie was set using the same salt
>>> _signed_cookie('nonexistent-cookie')
...
KeyError: 'nonexistent-cookie'
>>> _signed_cookie('nonexistent-cookie', False)
False
>>> _signed_cookie('cookie-that-was-tampered-with')
...
BadSignature: ...
>>> _signed_cookie('name', max_age=60)
...
SignatureExpired: Signature age 1677.3839159 > 60 seconds
>>> _signed_cookie('name', False, max_age=60)
False
HttpRequest.is_secure() : True如果请求是安全的,则返回;也就是说,如果它是⽤ HTTPS 制作的。
HttpRequest.is_ajax():通过检查字符串的标头,返回True请求是否是通过 an 发出的。⼤多数现代 JavaScript 库都会发送此标头。如果您编写⾃⼰的调⽤(在浏览器端),则必须⼿动设置此标头才能⼯作。
HttpRequest.__iter__()
实现⽤于从HttpRequest实例读取的类⽂件接⼝的⽅法。这使得以流⽅式使⽤传⼊请求成为可能。⼀个常见的⽤例是使⽤迭代解析器处理⼤型 XML 负载,⽽⽆需在内存中构建整个 XML 树。
给定这个标准接⼝,⼀个HttpRequest实例可以直接传递给⼀个 XML 解析器,例如 ElementTree:
ElementTree as ET
for element in ET.iterparse(request):
字符串函数注册登录process(element)
HttpRequest官⽅⽂档地址

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。