Django中HttpRequest和HttpResponse
2018-05-09 18:52
561 查看
请求和响应对象
Django中通过使用请求和响应对象来传递系统的状态。当请求一个页面的时候,Django就创建一个HttpRequest对象,它包含了关于请求的元数据对象,然后Django加载适当的视图,并将HttpRequest作为视图函数的第一个参数,每个视图负责返回一个HttpResponse对象。
一、HttpRequest对象
classHttpRequest[源代码]
常用属性
HttpRequest.path_info 返回用户访问url,不包括域名HttpRequest.method 请求中使用的HTTP方法的字符串表示,全大写表示。
HttpRequest.GET 包含所有HTTP GET参数的类字典对象
HttpRequest.POST 包含所有HTTP POST参数的类字典对象
HttpRequest.body 请求体,byte类型 request.POST的数据就是从body里面提取到的
其他属性:
1.HttpRequest.get_host() 根据从HTTP_X_FORWARDED_HOST(如果打开 USE_X_FORWARDED_HOST,默认为False)和 HTTP_HOST 头部信息返回请求的原始主机。 如果这两个头部没有提供相应的值,则使用SERVER_NAME 和SERVER_PORT,在PEP 3333 中有详细描述。 USE_X_FORWARDED_HOST:一个布尔值,用于指定是否优先使用 X-Forwarded-Host 首部,仅在代理设置了该首部的情况下,才可以被使用。 例如:"127.0.0.1:8000" 注意:当主机位于多个代理后面时,get_host() 方法将会失败。除非使用中间件重写代理的首部。 2.HttpRequest.get_full_path() 返回 path,如果可以将加上查询字符串。 例如:"/music/bands/the_beatles/?print=true" 3.HttpRequest.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None) 返回签名过的Cookie 对应的值,如果签名不再合法则返回django.core.signing.BadSignature。 如果提供 default 参数,将不会引发异常并返回 default 的值。 可选参数salt 可以用来对安全密钥强力攻击提供额外的保护。max_age 参数用于检查Cookie 对应的时间戳以确保Cookie 的时间不会超过max_age 秒。 复制代码 >>> request.get_signed_cookie('name') 'Tony' >>> request.get_signed_cookie('name', salt='name-salt') 'Tony' # 假设在设置cookie的时候使用的是相同的salt >>> request.get_signed_cookie('non-existing-cookie') ... KeyError: 'non-existing-cookie' # 没有相应的键时触发异常 >>> request.get_signed_cookie('non-existing-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 复制代码 4.HttpRequest.is_secure() 如果请求时是安全的,则返回True;即请求通是过 HTTPS 发起的。 5.HttpRequest.is_ajax() 如果请求是通过XMLHttpRequest 发起的,则返回True,方法是检查 HTTP_X_REQUESTED_WITH 相应的首部是否是字符串'XMLHttpRequest'。 大部分现代的 JavaScript 库都会发送这个头部。如果你编写自己的 XMLHttpRequest 调用(在浏览器端),你必须手工设置这个值来让 is_ajax() 可以工作。 如果一个响应需要根据请求是否是通过AJAX 发起的,并且你正在使用某种形式的缓存例如Django 的 cache middleware, 你应该使用 vary_on_headers('HTTP_X_REQUESTED_WITH') 装饰你的视图以让响应能够正确地缓存。
HttpRequest方法
注意:键值对的值是多个的时候,比如checkbox类型的input标签,select标签,需要用:
request.POST.getlist("hobby")
二、HttpResponse对象
与由Django自动创建的HttpRequest对象相比,HttpResponse对象是我们的职责范围了。我们写的每个视图都需要实例化,填充和返回一个HttpResponse。HttpResponse类位于django.http模块中。
使用
传递字符串
from django.http import HttpResponse response = HttpResponse("Here's the text of the Web page.") response = HttpResponse("Text only, please.", content_type="text/plain")
设置或删除响应头信息
response = HttpResponse() response['Content-Type'] = 'text/html; charset=UTF-8' del response['Content-Type']
属性
HttpResponse.content:响应内容 HttpResponse.charset:响应内容的编码 HttpResponse.status_code:响应的状态码
JsonResponse对象
JsonResponse是HttpResponse的子类,专门用来生成JSON编码的响应。from django.http import JsonResponse response = JsonResponse({'foo': 'bar'}) print(response.content) b'{"foo": "bar"}'
默认只能传递字典类型,如果要传递非字典类型需要设置一下safe关键字参数。
response = JsonResponse([1, 2, 3], safe=False)
相关文章推荐
- python web开发——Django HttpRequest和HttpResponse
- 基于 Django1.10 文档的深入学习(14)—— Request and response objects 之 HttpResponse objects
- Django——20141014深入理解Django HttpRequest HttpResponse的类和实例
- Django——HttpRequest和HttpResponse
- JavaWeb:HttpServletResponse和HttpServletRequest
- HTTP协议 (三) 压缩 之前写过一个篇 【HTTP协议详解】 ,这次继续介绍HTTP协议中的压缩。 本文会使用Fiddler来查看HTTP request和Response, 如果不熟悉这个工
- HttpWebRequest和HttpWebResponse
- 使用HttpWebRequest以及HttpWebResponse读取Http远程文件
- HttpWebRequest && WebResponse
- 站外提交,HttpWebRequest,WebResponse(推荐)
- HttpWebRequest 和 HttpWebResponse 的应用
- Django中request和response中的属性方法详述
- HttpServletResponse.sendRedirect()与RequestDispatcher.forward()的区别
- HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的
- HttpServlet、HttpServletRequest、HttpServletResponse
- 第 3 节: 3-Http协议之Request、Response
- HttpWebRequest,HttpWebResponse用途和webServers的作用
- JAVAWEB开发之HttpServletResponse和HttpServletRequest详解(下)(各种乱码、验证码、重定向和转发)
- Fix The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 b
- HttpServletResponse,HttpServletRequest详解