• Django Request 与Response对象


      Django使用请求和响应对象在系统中传递状态。当请求页面时,Django创建一个HttpRequest对象,该对象包含关于请求的元数据。

    然后Django加载适当的视图,将HttpRequest作为第一个参数传递给视图函数。每个视图都负责返回HttpResponse对象。


     

    一、HttpRequest

    HttpRequet.schema:所使用的Http协议(http,https)

    HttpRequest.body:请求体

    HttpRequest.path:表示请求页面的完整路径的字符串,不包括模式或域Http。

    HttpRequest.path_info:与path相比只包含路径信息

    HttpRequest.method:请求方法

    HttpRequest.encoding:表示用于解码表单提交数据的当前编码(或无编码

    HttpRequest.content_type:表示请求MIME类型的字符串,从CONTENT_TYPE报头解析。

    HttpRequest.content_params:一个包含在CONTENT_TYPE头中的键/值参数的字典。

    HttpRequest.COOKIES:包含所有cookie的字典。键和值是字符串。

    HttpRequest.FILES:一个类字典的对象,包含所有上传的文件。文件中的每个键都是 上传文件的表单的名称。文件中的每个值都是UploadedFile。只有当请求方法是POST且发送到请求的具有enctype="multipart/form-data"时,文件才会包含数据。否则,文件将是一个空白的类字典对象。

    HttpRequest.session:表示当前会话的可读和可写的、类似词典的对象。

    HttpRequest.ste:当前站点

    HttpRequest.user:表示当前登录的用户。如果用户当前没有登录,用户将被设置为AnonymousUser实例。

    HttpRequest.get_full_path:获取当前URL路径

    HttpRequest.get_signed_cookie():返回已签名cookie的cookie值,或引发django.core.sign。如果签名不再有效,则出现BadSignature异常。如果您提供默认参数,异常将被抑制,而该默认值将被返回。

    HttpRequest.is_ajax():判断是否是Ajax请求


    二、QueryDict对象

    大部分字典方法都适用

    QueryDict.__init__(query_string=None,mutable=False,encoding=None)

    >>> QueryDict('a=1&a=2&c=3')
    <QueryDict: {'a': ['1', '2'], 'c': ['3']}>

    QueryDict.fromkeys()

    >>> QueryDict.fromkeys(['a', 'a', 'b'], value='val')
    <QueryDict: {'a': ['val', 'val'], 'b': ['val']}>

    QueryDict.__geyitem__(key):返回key的值

    QueryDict.__contains__(key):允许in运算

    QueryDict.lists():与items()类似,只不过它以列表的形式包含字典中每个成员的所有值。

    >>> q = QueryDict('a=1&a=2&a=3')
    >>> q.lists()
    [('a', ['1', '2', '3'])]

    QueryDict.urlencode():

    >>> q = QueryDict('a=2&b=3&b=5')
    >>> q.urlencode()
    'a=2&b=3&b=5'

    三、HttpResponse对象

    向HttpResponse中传递迭代器,将会立即遍历迭代器,转换成字符串后丢弃。如果需要将响应从迭代器流到客户机,则必须使用StreamingHttpResponse类。

    添加键值对

    >>> response = HttpResponse()
    >>> response['Age'] = 120
    >>> del response['Age']

    HttpResponse.__init__(content='', content_type=None, status=200, reason=None, charset=None):初始化一个response

    HttpResponse.set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=None, httponly=False, samesite=None):设置cookie

    max_age应该是秒数,或者None,如果cookie仅持续客户端的浏览器会话时间,则为0秒(默认)。如果未指定过期,将计算过期时间。
    
    expires可以是“Wdy, DD
    -Mon-YY HH:MM:SS GMT”格式的字符串,也可以是datetime格式。UTC中的datetime对象。如果expires是datetime对象,则计算max_age。
    如果您想设置跨域cookie,请使用domain。例如,domain
    ="example.com"将设置一个cookie,该cookie可以被www.example.com、blog.example.com等域读取。否则,cookie只能被设置cookie的域读取
    如果希望阻止客户端JavaScript访问cookie,请使用httponly
    =True。
    HTTPOnly是一个包含在Set
    -Cookie HTTP响应头中的标志。它不是RFC 2109 cookie标准的一部分,也不是所有浏览器都一致支持它。但是,当它设置时,它可能是一种降低客户端脚本访问受保护cookie数据的风险的有用方法。
    使用samesite
    ='Strict'或samesite='Lax'告诉浏览器在执行跨源请求时不要发送此cookie。并不是所有浏览器都支持SameSite。

    HttpResponse.set_signed_cookis():与set_cookie()类似,但是在设置cookie之前对其进行加密签名。与HttpRequest.get_signed_cookie()一起使用。您可以使用可选的salt参数来添加键强度,但是您需要记住将它传递给相应的HttpRequest.get_signed_cookie()调用。

    HttpResponse.delete_cookie(key,path='/',domain=None):即使cookie不存在也不会被删除。由于cookie的工作方式,路径和域应该与在set_cookie()中使用的值相同——否则cookie可能不会被删除。


    四、HttpResponse子类

    HttpResponseRedirect():返回状态码302参数url,响应将会被重定向到url

    HttpResponsePermanentRedirect():状态码302永久重定向到某个url

    HttpResponseNotModified():构造函数不接受任何参数,并且不应该向该响应添加任何内容。使用它可以指定自用户上次请求(状态代码304)以来页面没有被修改。

    HttpResponseBadRequest():状态码400,请求错误

    HttpResponseNotFound():状态码404,请求出错,页面找不到

    HttpResponseForbidden():状态码403

    HttpResponseServerError():状态码500,服务器内部错误

  • 相关阅读:
    未能加载文件或程序集“xxx, Version=x.x.x.x, Culture=neutral, PublicKeyToken=xxxxxxxxxxxx”或它的某一个依赖项。系统找不到指定的文件
    RabbitMQ本地正常,发布到服务器上 出行连接失败
    Windows 服务 创建 安装 卸载 和调试
    CSS 格式化 一行一条
    ES6---new Promise()讲解,Promise对象是用来干嘛的?
    Win Server 2008 R2 IIS 默认只能添加一个 443 HTTPS 端口
    MVC 部分视图:Partial() 、RenderPartial() 、 Action() 、RenderAction() 、 RenderPage() 区别
    ;(function ($, undefined){ })(jQuery); 的使用及说明
    JS中的call()方法和apply()方法用法总结
    MongoDB服务无法启动,windows提示发生服务特定错误:100
  • 原文地址:https://www.cnblogs.com/SunQi-Tony/p/10009422.html
Copyright © 2020-2023  润新知