HttpRequest对象

属性

HttpRequest.scheme

New in Django 1.7.一个字符串,表示请求的方案(通常是http或https)。

HttpRequest.body

一个字节字符串,表示原始HTTP 请求的正文。

它对于处理非HTML 形式的数据非常有用:二进制图像、XML等。

如果要处理常规的表单数据,应该使用HttpRequest.POST。

你也可以使用”类文件“形式的接口从HttpRequest 中读取数据。

参见HttpRequest.read()。

HttpRequest.path

一个字符串,表示请求的页面的完整路径,不包含域名。

例如:"/music/bands/the_beatles/"

HttpRequest.path_info

在某些Web 服务器配置下,主机名后的URL 部分被分成脚本前缀部分和路径信息部分。

path_info 属性将始终包含路径信息部分,不论使用的Web 服务器是什么。使用它代替path可以让代码在测试和开发环境中更容易地切换。

例如

如果应用的WSGIScriptAlias设置为/minfo,那么当path是"/minfo/music/bands/the_beatles/" 时path_info将是"/music/bands/the_beatles/"。

HttpRequest.method

一个字符串,表示请求使用的HTTP 方法。必须使用大写。

例如:if request.method == 'GET': do_something()elif request.method == 'POST': do_something_else()

HttpRequest.encoding

一个字符串,表示提交的数据的编码方式(如果为None 则表示使用DEFAULT_CHARSET设置)。

这个属性是可写的,你可以修改它来修改访问表单数据使用的编码。接下来对属性的任何访问(例如从GET 或 POST中读取数据)将使用新的encoding 值。如果你知道表单数据的编码不在DEFAULT_CHARSET中,则使用它。

HttpRequest.GET

一个类似于字典的对象,包含HTTP GET 的所有参数。详情请参考下面的QueryDict文档。

HttpRequest.POST

一个包含所有给定的HTTP POST参数的类字典对象,提供了包含表单数据的请求。详情请参考下面的QueryDict文档。

如果需要访问请求中的原始或非表单数据,可以使用HttpRequest.body属性。

POST 请求可以带有空的POST 字典 —— 如果通过HTTP POST 方法请求一个表单但是没有包含表单数据的话。

因此,不应该使用if request.POST 来检查使用的是否是POST 方法;应该使用if request.method == "POST"。

注意:POST 不包含上传的文件信息。参见FILES。

HttpRequest.COOKIES

一个标准的Python 字典,包含所有的cookie。键和值都为字符串。

HttpRequest.FILES

一个类似于字典的对象,包含所有的上传文件。

FILES中的每个键为中的name,

注意,FILES只有在请求的方法为POST 且提交的

带enctype="multipart/form-data"的情况下才会包含数据。否则,FILES 将为一个空的类似于字典的对象。

HttpRequest.META

一个标准的Python 字典,包含所有的HTTP 头部。

具体的头部信息取决于客户端和服务器,下面是一些示例:

CONTENT_LENGTH —— 请求的正文的长度(是一个字符串)。

CONTENT_TYPE —— 请求的正文的MIME 类型。

HTTP_ACCEPT —— 响应可接收的Content-Type。

HTTP_ACCEPT_ENCODING —— 响应可接收的编码。

HTTP_ACCEPT_LANGUAGE —— 响应可接收的语言。

HTTP_HOST —— 客服端发送的HTTP Host 头部。

HTTP_REFERER —— Referring 页面。

HTTP_USER_AGENT —— 客户端的user-agent 字符串。

QUERY_STRING —— 单个字符串形式的查询字符串(未解析过的形式)。

REMOTE_ADDR —— 客户端的IP 地址。

REMOTE_HOST —— 客户端的主机名。

REMOTE_USER —— 服务器认证后的用户。

REQUEST_METHOD —— 一个字符串,例如"GET" 或"POST"。

SERVER_NAME —— 服务器的主机名。

SERVER_PORT —— 服务器的端口(是一个字符串)。

从上面可以看到,除CONTENT_LENGTH 和CONTENT_TYPE 之外,请求中的任何HTTP 头部转换为META 的键时,都会将所有字母大写并将连接符替换为下划线最后加上HTTP_ 前缀。

所以,一个叫做X-Bender 的头部将转换成META 中的HTTP_X_BENDER 键。

HttpRequest.user

一个AUTH_USER_MODEL类型的对象,表示当前登录的用户。

如果用户当前没有登录,user 将设置为django.contrib.auth.models.AnonymousUser 的一个实例。你可以通过is_authenticated()区分它们

像这样:

if request.user.is_authenticated():    # Do something for logged-in users.else:    # Do something for anonymous users.``user 

只有当Django 启用AuthenticationMiddleware中间件时才可用。

HttpRequest.session

一个既可读又可写的类似于字典的对象,表示当前的session信息。只有当Django 启用会话的支持时才可用。

HttpRequest.urlconf

不是由Django 自身定义的,但是如果其它代码(例如,自定义的中间件类)设置了它,Django 就会读取它。如果存在,它将用来作为当前的请求的Root URLconf,并覆盖ROOT_URLCONF设置。

HttpRequest.resolver_match

一个ResolverMatch的实例,表示解析后的URL。这个属性只有在URL 解析方法之后才设置,这意味着它在所有的视图中可以访问,但是在在URL 解析发生之前执行的中间件方法中不可以访问(比如process_request,但你可以使用process_view 代替)。

方法

HttpRequest.get_full_path()

返回path,如果可以将加上查询字符串。例如:"/music/bands/the_beatles/?print=true"

HttpRequest.build_absolute_uri(location)

返回location 的绝对URI。如果location 没有提供,则设置为request.get_full_path()。

如果URI 已经是一个绝对的URI,将不会修改。否则,使用请求中的服务器相关的变量构建绝对URI。

例如:"http://example.com/music/bands/the_beatles/?print=true"

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' # assuming cookie was set using the same 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
HttpRequest.is_secure()

如果请求时是安全的,则返回True;即请求是通过HTTPS 发起的。

HttpRequest.is_ajax()

判断是否通过ajax发送

如果请求是通过XMLHttpRequest 发起的,则返回True

方法是检查HTTP_X_REQUESTED_WITH 头部是否是字符串'XMLHttpRequest'。

大部分现代的JavaScript 库都会发送这个头部。如果你编写自己的XMLHttpRequest 调用(在浏览器端),你必须手工设置这个值来让is_ajax() 可以工作。

如果一个响应需要根据请求是否是通过AJAX 发起的,并且你正在使用某种形式的缓存例如Django 的cachemiddleware, 你应该使用vary_on_headers('HTTP_X_REQUESTED_WITH')装饰你的视图以让响应能够正确地缓存。

HttpRequest.read(size=None)
HttpRequest.readline()
HttpRequest.readlines()
HttpRequest.xreadlines()
HttpRequest.__ iter__()

这几个方法实现类文件的接口用于读取HttpRequest·

实例。这使得可以用流的方式读取进来的请求。

一个常见的用例是使用迭代解析器处理大型XML有效载荷,而不在内存中构造一个完整的XML树。

根据这个标准的接口,一个HttpRequest 实例可以直接传递给XML 解析器,

例如ElementTree:import xml.etree.ElementTree as ETfor element in ET.iterparse(request): process(element)

你可能感兴趣的:(HttpRequest对象)