解决Django的request.POST获取不到内容的问题
作者:NoneSec 时间:2022-12-26 18:55:20
我通过如下的一段程序发送post请求:
import urllib3
pool = urllib3.connection_from_url('http://127.0.0.1:8090')
resp = pool.request('POST', '/polls/', fields={'key1':'value1', 'key2':'value2'}, headers={'Content-Type':'application/json'}, encode_multipart=False)
在服务器端我用request.POST期望能获取到<QueryDict: {u'key2': [u'value2'], u'key1': [u'value1']}>,但是我发现获取到的是一个空的<QueryDict: {}>,用reqyest.body是能获取到原始的请求内容key2=value2&key1=value1的。
这个时候只能去文档中找答案了,但是貌似Django中的文档也没给出我答案,这时候我就只能通过源码来找答案了,下面是class HttpRequest(object)中获取POST QueryDict的函数部分:
def _load_post_and_files(self):
"""Populate self._post and self._files if the content-type is a form type"""
if self.method != 'POST':
self._post, self._files = QueryDict(encoding=self._encoding), MultiValueDict()
return
if self._read_started and not hasattr(self, '_body'):
self._mark_post_parse_error()
return
if self.content_type == 'multipart/form-data':
if hasattr(self, '_body'):
# Use already read data
data = BytesIO(self._body)
else:
data = self
try:
self._post, self._files = self.parse_file_upload(self.META, data)
except MultiPartParserError:
# An error occurred while parsing POST data. Since when
# formatting the error the request handler might access
# self.POST, set self._post and self._file to prevent
# attempts to parse POST data again.
# Mark that an error occurred. This allows self.__repr__ to
# be explicit about it instead of simply representing an
# empty POST
self._mark_post_parse_error()
raise
elif self.content_type == 'application/x-www-form-urlencoded':
self._post, self._files = QueryDict(self.body, encoding=self._encoding), MultiValueDict()
else:
self._post, self._files = QueryDict(encoding=self._encoding), MultiValueDict()
函数看起来有点长,但是我们只要关注后面的if elif else这三个分支即可,从elif self.content_type == 'application/x-www-form-urlencoded':这个分支能看到只有请求header中的'Content-Type':'application/x-www-form-urlencoded'才会填充request.POST,其它情况下只有一个空的<QueryDict: {}>。
从这个问题也看到了Django对'Content-Type':'application/json'没有做任何处理,跟我预想的有一点不一样。
来源:https://blog.csdn.net/liuxingen/article/details/54176205
标签:request,获取,POST,Django
0
投稿
猜你喜欢
python用函数创造字典的实例讲解
2021-04-20 13:55:11
Python实现DBSCAN聚类算法并样例测试
2022-04-22 22:25:48
Python八皇后问题解答过程详解
2021-09-09 18:06:17
mysql生成指定位数的随机数及批量生成随机数的方法
2024-01-16 18:22:22
Go/C语言LeetCode题解997找到小镇法官
2024-05-21 10:18:54
Go语言中TCP/IP网络编程的深入讲解
2024-01-30 08:05:55
asp如何取回已忘记的密码?
2010-05-13 16:33:00
一个例子轻松学会Vue.js
2024-05-02 17:38:47
python 获得任意路径下的文件及其根目录的方法
2022-02-02 17:32:15
python把ipynb文件转换成pdf文件过程详解
2022-07-27 23:50:24
使用百度云加速后网站打开速度慢、广告不显示的解决方法
2023-04-23 19:07:24
Python json模块与jsonpath模块区别详解
2023-09-17 18:07:26
vue.js在标签属性中插入变量参数的方法
2024-05-28 15:58:09
js判断undefined类型,undefined,null, 的区别详细解析
2024-05-09 10:34:26
python使用socket高效传输视频数据帧(连续发送图片)
2021-04-14 23:17:40
Python中eval()函数的详细使用教程
2023-11-22 15:51:39
yolov5 win10 CPU与GPU环境搭建过程
2021-07-17 15:21:11
Python深度优先算法生成迷宫
2023-05-13 08:38:09
python检测服务器端口代码实例
2023-07-07 06:34:14
python requests实现上传excel数据流
2022-07-13 16:35:30