• 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,使用该方法便于移植。
    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://example.com/music/bands/the_beatles/?print=true'
    >>> request.build_absolute_uri('/bands/')
    'https://example.com/bands/'
    >>> request.build_absolute_uri('https://example2.com/bands/')
    'https://example2.com/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.djangoproject.com/zh-hans/2.1/ref/request-response/#django.http.HttpRequest

  • 相关阅读:
    数据绑定表达式语法(Eval,Bind区别)
    使用博客园的第一件事 自定义主题
    sql2000 跨服务器复制表数据
    使用UpdatePanel 局部刷新出现中文乱码的解决方法!!
    MMC不能打开文件MSC文件
    sql 日期 、时间相关
    loaded AS2 swf call function in AS3 holder
    Rewrite the master page form action attribute in asp.net 2.0
    100万个不重复的8位的随机数
    flash 中实现斜切变型
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/14966763.html
Copyright © 2020-2023  润新知