前言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,使用该方法便于移植。 | HttpRequest.method | 获取该请求的方法GET/POST/PUT…,比如:if request.method == 'GET’ | HttpRequest.encoding | 获取请求中表单提交数据的编码。 | HttpRequest.content_type | 获取请求的MIME类型(从CONTENT_TYPE头部中获取),django1.10的新特性。 | HttpRequest.content_params | 获取CONTENT_TYPE中的键值对参数,并以字典的方式表示,django1.10的新特性。 | HttpRequest.GET | 返回一个 querydict 对象(类似于字典,本文最后有querydict的介绍),该对象包含了所有的HTTP GET参数 | HttpRequest.POST | 返回一个 querydict ,该对象包含了所有的HTTP POST参数,通过表单上传的所有 字符 都会保存在该属性中。 | HttpRequest.COOKIES | 返回一个包含了所有cookies的字典。键和值是字符串。 | HttpRequest.FILES | 返回一个包含了所有的上传文件的 querydict 对象。通过表单所上传的所有 文件 都会保存在该属性中。key的值是input标签中name属性的值,value的值是一个UploadedFile对象 | HttpRequest.META | 返回一个包含了所有http头部信息的字典 | HttpRequest.resolver_match | ResolverMatch表示已解析 URL的实例。此属性仅在 URL 解析发生后设置,这意味着它在所有视图中可用,但在 URL 解析发生之前执行的中间件中不可用(process_view()尽管您可以使用它 ) | 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实际上是由一个定义在django.contrib.auth.models 中的 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之前,没有该属性,但有与该属性同名的方法。 方法: 方法 | 说明 | 作用 |
---|
HttpRequest.user.get_username() | 注意:方法的圆括号在templates标签中必需省略!!获取username。尽量使用该方法来代替使用username字段 |
| HttpRequest.user.get_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 方法HttpRequest.get_host() :使用来自HTTP_X_FORWARDED_HOST(如果USE_X_FORWARDED_HOST已启用)和HTTP_HOST标头中的信息以该顺序返回请求的原始主机 HttpRequest.get_port() :使用来自HTTP_X_FORWARDED_PORT(如果USE_X_FORWARDED_PORT已启用)和SERVER_PORT META变量的信息,按该顺序返回请求的起始端口 。 HttpRequest.get_full_path():返回path,加上附加的查询字符串(如果适用)。例子:"/music/bands/the_beatles/?print=true" HttpRequest.get_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。如果未提供位置,则位置将设置为request.get_full_path()。 如果位置已经是绝对 URI,则不会更改。否则,绝对 URI 将使用此请求中可用的服务器变量构建。例如: >>> request.build_absolute_uri() 'https:///music/bands/the_beatles/?print=true' >>> request.build_absolute_uri('/bands/') 'https:///bands/' >>> request.build_absolute_uri('https:///bands/') 'https:///bands/' HttpRequest.get_signed_cookie( key , default=RAISE_ERROR , salt='' , max_age=None ): 返回签名 cookie 的 cookie 值,或者django.core.signing.BadSignature如果签名不再有效则引发 异常。如果您提供default参数,则异常将被抑制,而将返回默认值。 可选salt参数可用于提供额外保护,防止对您的密钥进行暴力破解。如果提供,max_age将根据附加到 cookie 值的签名时间戳检查该参数, 以确保 cookie 不超过 max_age秒。 例如: >>> request.get_signed_cookie('name') 'Tony' >>> request.get_signed_cookie('name', salt='name-salt') 'Tony' # assuming cookie was set using the same salt >>> request.get_signed_cookie('nonexistent-cookie') ... KeyError: 'nonexistent-cookie' >>> request.get_signed_cookie('nonexistent-cookie', False) False >>> request.get_signed_cookie('cookie-that-was-tampered-with') ... BadSignature: ... >>> request.get_signed_cookie('name', max_age=60) ... SignatureExpired: Signature age 1677.3839159 > 60 seconds >>> request.get_signed_cookie('name', False, max_age=60) False HttpRequest.is_secure() : True如果请求是安全的,则返回;也就是说,如果它是用 HTTPS 制作的。 HttpRequest.is_ajax():通过检查字符串的标头,返回True请求是否是通过 an 发出的 。大多数现代 JavaScript 库都会发送此标头。如果您编写自己的调用(在浏览器端),则必须手动设置此标头才能工作。 HttpRequest.read( size=None ) HttpRequest.readline() HttpRequest.readlines() HttpRequest.__iter__() 实现用于从HttpRequest实例读取的类文件接口的方法 。这使得以流方式使用传入请求成为可能。一个常见的用例是使用迭代解析器处理大型 XML 负载,而无需在内存中构建整个 XML 树。 给定这个标准接口,一个HttpRequest实例可以直接传递给一个 XML 解析器,例如 ElementTree: import xml.etree.ElementTree as ET for element in ET.iterparse(request): process(element) HttpRequest官方文档地址https://docs./zh-hans/2.1/ref/request-response/#django.http.HttpRequest 2021年第八期《python接口web自动化+测试开发》7.17号开学(课程全面升级!) 加量不加价(新增postman, 赠送selenium和python基础2个课)
本期上课时间:7月17号-10月16号,每周六、周日晚上20:30-22:30
|