解决Django的request.POST获取不到内容的问题


Posted in Python onMay 28, 2018

我通过如下的一段程序发送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'没有做任何处理,跟我预想的有一点不一样。

以上这篇解决Django的request.POST获取不到内容的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python通过字典dict判断指定键值是否存在的方法
Mar 21 Python
利用Python批量生成任意尺寸的图片
Aug 29 Python
使用XML库的方式,实现RPC通信的方法(推荐)
Jun 14 Python
在CentOS6上安装Python2.7的解决方法
Jan 09 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
Jan 31 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
Aug 07 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
Dec 24 Python
django搭建项目配置环境和创建表过程详解
Jul 22 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
Jan 16 Python
用python写PDF转换器的实现
Oct 29 Python
安装pyinstaller遇到的各种问题(小结)
Nov 20 Python
Python编程super应用场景及示例解析
Oct 05 Python
Django后台获取前端post上传的文件方法
May 28 #Python
基于Django URL传参 FORM表单传数据 get post的用法实例
May 28 #Python
浅析Python装饰器以及装饰器模式
May 28 #Python
Python装饰器知识点补充
May 28 #Python
更换Django默认的模板引擎为jinja2的实现方法
May 28 #Python
django manage.py扩展自定义命令方法
May 27 #Python
python实现windows下文件备份脚本
May 27 #Python
You might like
让Json更懂中文(JSON_UNESCAPED_UNICODE)
2011/10/27 PHP
yii框架中的Url生产问题小结
2012/01/16 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
2020/04/14 PHP
javascript 树控件 比较好用
2009/06/11 Javascript
基于jQuery实现的当离开页面时出现提示的实现代码
2011/06/27 Javascript
获取客户端网卡MAC地址和IP地址实现JS代码
2013/03/17 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
手机Web APP如何实现分享多平台功能
2016/08/19 Javascript
js转html实体的方法
2016/09/27 Javascript
vue2.0+vue-dplayer实现hls播放的示例
2018/03/02 Javascript
JS立即执行的匿名函数用法分析
2019/11/04 Javascript
解决Vue.js应用回退或刷新界面时提示用户保存修改问题
2019/11/24 Javascript
JS自定义对象创建与简单使用方法示例
2020/01/15 Javascript
vue打包npm run build时候界面报错的解决
2020/08/13 Javascript
js实现特别简单的钟表效果
2020/09/14 Javascript
[01:11:15]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python实现线程状态监测简单示例
2018/03/28 Python
好的Python培训机构应该具备哪些条件
2018/05/23 Python
opencv与numpy的图像基本操作
2019/03/08 Python
通过PYTHON来实现图像分割详解
2019/06/26 Python
Python实现寻找回文数字过程解析
2020/06/09 Python
Python在后台自动解压各种压缩文件的实现方法
2020/11/10 Python
python unichr函数知识点总结
2020/12/16 Python
css3学习系列之移动属性详解
2017/07/04 HTML / CSS
HTML5 Canvas图像模糊完美解决办法
2018/02/06 HTML / CSS
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
北卡罗来纳州豪华家具和家居装饰店:Carolina Rustica
2018/10/30 全球购物
ANINE BING官方网站:奢华的衣橱基本款和时尚永恒的单品
2019/11/26 全球购物
事业单位公务员的职业生涯规划
2014/01/15 职场文书
12岁生日演讲稿
2014/05/14 职场文书
小学生民族团结演讲稿
2014/08/27 职场文书
绍兴鲁迅故居导游词
2015/02/09 职场文书
小学记事作文之200字
2019/08/06 职场文书
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript
将Python代码打包成.exe可执行文件的完整步骤
2021/05/12 Python