Django HttpRequest对象
2021-04-09 18:27
标签:sed server content 表单 mode eth war coding er模型 HttpRequest对象的大部分属性是只读的,除非特别注明。 字符串类型,表示请求的协议种类,“http”或“https”。 bytes类型,表示原始HTTP请求的正文。它对于处理非HTML形式的数据非常有用:二进制图像、XML等。如果要处理常规的表单数据,应该是用HttpRequest.POST。 字符串类型,表示当前请求页面的完整路径,但不包括协议名和域名。例如:"/music/bands/the_beatles/"。这个属性,常被用于我们进行某项操作时,若不通过,返回用户先前浏览的页面。 在某些Web服务器配置下,主机名后的URL部分被分成前缀部分和路径信息部分。path_info属性将始终包含路径信息部分,不论使用的Web服务器是什么。使用它代替path可以让代码在测试和开发环境中更容易切换。 字符串类型,表示请求使用的HTTP方法。默认为大写。像这样: 通过这个属性来判断请求的方法,然后根据请求的方法不同,在视图中执行不同的代码。 字符串类型,表示提交的数据的编码方式(若为None则表示使用DEFAULT_CHARSET设置)。这个属性是可写的,可以通过修改它来改变表单数据的编码。任何随后的属性访问(例如GET或POST)将使用新的编码方式。 表示从 包含在 一个类似于字典的对象,包含GET请求中的所有参数。 一个包含所有POST请求的参数,以及包含表单数据的字典。 注意:请使用 包含所有Cookie信息的字典。 键和值都为字符串。可以类似字典类型的方式,在cookie中读写数据,但是注意cookie是不安全的,因此,不要写敏感重要的信息。 一个类似于字典的对象,包含所有上传的文件数据。 FILES中的每个键为 要在Django中实现文件上传,就要靠这个属性! 如果请求方法是POST且请求的 包含所有HTTP头部信息的字典。 可用的头部信息取决于客户端和服务器,下面是一些示例: ·CONTENT_LENGTH —— 请求正文的长度(以字符串计)。 ·CONTENT_TYPE —— 请求正文的MIME类型。 ·HTTP_ACCEPT —— 可接收的响应 ·HTTP_ACCEPT_ENCODING —— 可接收的响应编码类型。 ·HTTP_ACCEPT_LANGUAGE —— 可接收的响应语言种类。 ·HTTP_HOST —— 客服端发送的Host头部。 ·HTTP_REFERER —— Referring页面。 ·HTTP_USER_AGENT —— 客户端的 ·QUERY_STRING —— 查询字符串。 ·REMOTE_ADDR —— 客户端的IP地址。想要获取客户端的ip信息,就在这里! ·REMOTE_HOST —— 客户端的主机名。 ·REMOTE_USER —— 服务器认证后的用户,如果可用。 ·REQUEST_METHOD —— 表示请求方法的字符串,例如"GET" 或"POST"。 以上只是比较重要和常用的,还有很多未列出。 从上面可以看到,除 代表一个已解析的URL的ResolverMatch实例。 Django不会自动设置下面这些属性,而是由你自己在应用程序中设置并使用它们。 表示当前app的名字。url模板标签将使用其值作为 设置当前请求的根 将它的值修改为None,可以恢复使用 Django的contrib应用中包含的一些中间件会在请求上设置属性。 SessionMiddleware中间件:一个可读写的,类似字典的对象,表示当前会话。我们要保存用户状态,回话过程等等,靠的就是这个中间件和这个属性。 CurrentSiteMiddleware中间件: Django是支持多站点的,如果你同时上线了几个站点,就需要为每个站点设置一个站点id。 AuthenticationMiddleware中间件:表示当前登录的用户的 可以使用 根据 例如:"127.0.0.1:8000" 注:当主机位于多个代理的后面, 使用META中 返回包含完整参数列表的path。例如: 返回location的绝对URI形式。 如果location没有提供,则使用 例如:"https://example.com/music/bands/the_beatles/?print=true" 注:不鼓励在同一站点混合部署HTTP和HTTPS,如果需要将用户重定向到HTTPS,最好使用Web服务器将所有HTTP流量重定向到HTTPS。 从已签名的Cookie中获取值,如果签名不合法则返回django.core.signing.BadSignature。 可选参数salt用来为密码加盐,提高安全系数。 范例: 如果使用的是Https,则返回True,表示连接是安全的。 如果请求是通过XMLHttpRequest生成的,则返回True。 这个方法的作用就是判断,当前请求是否通过ajax机制发送过来的。 上面的几个方法都是从HttpRequest实例读取文件数据的方法。 可以将HttpRequest实例直接传递到XML解析器,例如ElementTree: Django HttpRequest对象 标签:sed server content 表单 mode eth war coding er模型 原文地址:https://www.cnblogs.com/lavender1221/p/12442905.html一、属性
1.HttpRequest.scheme
2.HttpRequest.body
3.HttpRequest.path
4.HttpRequest.path_info
5.HttpRequest.method
if request.method == ‘GET‘:
do_something()
elif request.method == ‘POST‘:
do_something_else()
6.HttpRequest.encoding
7.HttpRequest.content_type
CONTENT_TYPE
头解析的请求的MIME类型。
8.HttpRequest.content_params
CONTENT_TYPE
标题中的键/值参数字典。
9.HttpRequest.GET
10.HttpRequest.POST
if request.method == "POST"
来判断一个请求是否POST类型,而不要使用if request.POST
。POST中不包含上传文件的数据。
11.HttpRequest.COOKIES
12.HttpRequest.FILES
中的name属性值。 FILES中的每个值是一个
UploadedFile
。中带有
enctype="multipart/form-data"
属性,那么FILES将包含上传的文件的数据。 否则,FILES将为一个空的类似于字典的对象,属于被忽略、无用的情形。
13.HttpRequest.META
Content-Type
。user-agent
字符串。CONTENT_LENGTH
和CONTENT_TYPE
之外,请求中的任何HTTP头部键转换为META键时,都会将所有字母大写并将连接符替换为下划线最后加上HTTP_
前缀。所以,一个叫做X-Bender
的头部将转换成META中的HTTP_X_BENDER
键。
14.HTTPRequest.resolver_match
二、可自定义的属性
1. HttpRequest.current_app
reverse()
方法的current_app
参数。
2.HttpRequest.urlconf
URLconf
,用于指定不同的url路由进入口,这将覆盖settings中的ROOT_URLCONF
设置。ROOT_URLCONF
设置。三、由中间件设置的属性
1.HttpRequest.session
2.HttpRequest.site
get_current_site()
方法返回的Site或RequestSite的实例,代表当前站点是哪个。
3.HttpRequest.user
AUTH_USER_MODEL
的实例,这个模型是Django内置的Auth模块下的User模型。如果用户当前未登录,则user将被设置为AnonymousUser
的实例。is_authenticated
方法判断当前用户是否合法用户,如下所示:if request.user.is_authenticated:
... # Do something for logged-in users.
else:
... # Do something for anonymous users.
四、方法
1.HttpRequest.get_host()[source]
HTTP_X_FORWARDED_HOST
和HTTP_HOST
头部信息获取请求的原始主机。 如果这两个头部没有提供相应的值,则使用SERVER_NAME
和SERVER_PORT
。get_host()
方法将会失败。解决办法之一是使用中间件重写代理的头部,如下面的例子:from django.utils.deprecation import MiddlewareMixin
class MultipleProxyMiddleware(MiddlewareMixin):
FORWARDED_FOR_FIELDS = [
‘HTTP_X_FORWARDED_FOR‘,
‘HTTP_X_FORWARDED_HOST‘,
‘HTTP_X_FORWARDED_SERVER‘,
]
def process_request(self, request):
"""
Rewrites the proxy headers so that only the most
recent proxy is used.
"""
for field in self.FORWARDED_FOR_FIELDS:
if field in request.META:
if ‘,‘ in request.META[field]:
parts = request.META[field].split(‘,‘)
request.META[field] = parts[-1].strip()
2.HttpRequest.get_port()[source]
HTTP_X_FORWARDED_PORT
和SERVER_PORT
的信息返回请求的始发端口。
3.HttpRequest.get_full_path()[source]
/music/bands/the_beatles/?print=true
4.HttpRequest.build_absolute_uri(location)[source]
request.get_full_path()
的值。
5.HttpRequest.get_signed_cookie(key, default=RAISE_ERROR, salt=‘‘, max_age=None)[source]
max_age
参数用于检查Cookie对应的时间戳是否超时。>>> 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
6.HttpRequest.is_secure()[source]
7.HttpRequest.is_ajax()[source]
8.HttpRequest.read(size=None)[source]
9. HttpRequest.readline()[source]
10. HttpRequest.readlines()[source]
11. HttpRequest.xreadlines()[source]
12. HttpRequest.iter()
import xml.etree.ElementTree as ET
for element in ET.iterparse(request):
process(element)
下一篇:php文件加载和文件操作