Django request对象参数解析以及实现

HttpRequest对象

HttpRequest

属性

除非另有说明,否则所有属性都应被视为只读。

HttpRequest.scheme

表示请求方案的字符串(httphttps 通常)。

HttpRequest.body

原始HTTP请求主体为字节串。这对于以不同于常规HTML表单的方式处理数据很有用:二进制图像,XML有效负载等。对于处理常规表单数据,请使用 HttpRequest.POST

您也可以HttpRequest使用HttpRequest.read()文件状界面 从中读取内容HttpRequest.readline()使用这些I / O流方法之一读取请求访问body属性将产生一个RawPostDataException

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.content_type

CONTENT_TYPE标头解析的表示请求的MIME类型的字符串 

HttpRequest.content_params

CONTENT_TYPE 标头中包含键/值参数的字典

HttpRequest.GET

包含所有给定HTTP GET参数的类字典对象。请参阅QueryDict下面的 文档。

HttpRequest.POST

包含所有给定HTTP POST参数的类字典对象,条件是请求包含表单数据。请参阅QueryDict下面的 文档。如果您需要访问请求中发布的原始或非格式数据,请HttpRequest.body改为通过属性进行访问 

可以通过带有空POST 字典的POST发出请求-例如,如果通过POST HTTP方法请求了表单,但其中不包含表单数据。因此,您不应该使用 POST方法进行检查。而是使用(请参阅)。if request.POSTif request.method == "POST"HttpRequest.method

POST包含文件上传信息。请参阅FILES

HttpRequest.COOKIES

包含所有cookie的字典。键和值是字符串。

HttpRequest.FILES

包含所有上载文件的类字典对象。每个键 FILES都是name来自的中的每个值都是一个<input type="file" name="">FILESUploadedFile

有关更多信息,请参见管理文件

FILES仅当请求方法为POST且<form>发布到请求的方法为时,才会包含数据 enctype="multipart/form-data"否则,FILES将是一个空白的类似于字典的对象。

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"的字符串"POST"
  • SERVER_NAME –服务器的主机名。
  • SERVER_PORT –服务器的端口(以字符串形式)。

除了CONTENT_LENGTH和之外CONTENT_TYPE,如上所述,META通过将所有字符都转换为大写字母,用下划线替换所有连字符,并HTTP_在名称中添加前缀,将请求中的所有HTTP标头转换为因此,例如,称为的标头X-Bender将映射到METAkey HTTP_X_BENDER

请注意,runserver该名称会删除名称中带有下划线的所有标头,因此您不会在中看到它们META这样可以防止基于下划线和破折号之间的歧义的标头欺骗在WSGI环境变量中均被标准化为下划线。它与Nginx和Apache 2.4+等Web服务器的行为相匹配。

HttpRequest.headers是访问所有HTTP前缀标头以及plusCONTENT_LENGTH的更简单方法CONTENT_TYPE

HttpRequest.headers

不区分大小写,类似于dict的对象,该对象提供对请求中所有HTTP前缀的标头(plusContent-LengthContent-Type)的访问。

每个标题的名称在显示时都带有标题框(例如User-Agent)。您可以不区分大小写地访问标头:

>>> request.headers
{'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6', ...}

>>> 'User-Agent' in request.headers
True
>>> 'user-agent' in request.headers
True

>>> request.headers['User-Agent']
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)
>>> request.headers['user-agent']
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)

>>> request.headers.get('User-Agent')
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)
>>> request.headers.get('user-agent')
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)

#############
文件请求

class TestView(APIView):

def post(self,request,*args,**kwargs):
#print('request.body', request.body)
data=request.data
file=request.FILES.get('file')
print('HI,,,,,,,,,,',request.FILES)
# for k,v in request.FILES.items():
# # v是对像
# print(k,v.read())
print('file',file)
print('file.getlist',request.FILES.getlist(key='file'))
print('file.data',request.data)
print('file.name',file.name)
print('file.size',file.size)
print('file.content_type',file.content_type)
print('request.post',request.POST)
# filenames=[]
# for f in request.FILES.getlist('file'):
# fname=f.name
# filenames.append(fname)
# print('file.read()',file.read())
return CommonResponse({'ame':1,'code':0})
#return HttpResponse(file.read(), content_type='application/octet-stream')
 
原文地址:https://www.cnblogs.com/SunshineKimi/p/13975453.html