解决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获取文件后缀名及批量更新目录下文件后缀名的方法
Nov 11 Python
Python 3中的yield from语法详解
Jan 18 Python
Python2.7读取PDF文件的方法示例
Jul 13 Python
Python图像处理之gif动态图的解析与合成操作详解
Dec 30 Python
Appium+python自动化怎么查看程序所占端口号和IP
Jun 14 Python
pandas通过字典生成dataframe的方法步骤
Jul 23 Python
python3图片文件批量重命名处理
Oct 31 Python
Python求正态分布曲线下面积实例
Nov 20 Python
Python利用matplotlib绘制约数个数统计图示例
Nov 26 Python
使用python自动追踪你的快递(物流推送邮箱)
Mar 17 Python
Pandas对每个分组应用apply函数的实现
Dec 13 Python
Python+unittest+requests+excel实现接口自动化测试框架
Dec 23 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
php下实现折线图效果的代码
2007/04/28 PHP
将一维或多维的数组连接成一个字符串的php代码
2010/08/08 PHP
PHP内置过滤器FILTER使用实例
2014/06/25 PHP
windows平台中配置nginx+php环境
2015/12/06 PHP
thinkPHP5 tablib标签库自定义方法详解
2017/05/10 PHP
yii2局部关闭(开启)csrf的验证的实例代码
2017/07/10 PHP
详解PHP PDO简单教程
2019/05/28 PHP
PHP进阶学习之垃圾回收机制详解
2019/06/18 PHP
Iframe 自适应高度并实时监控高度变化的js代码
2009/10/30 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
jQuery获取样式中颜色值的方法
2015/01/29 Javascript
JS获取图片lowsrc属性的方法
2015/04/01 Javascript
分享javascript计算时间差的示例代码
2020/03/19 Javascript
Vuejs第十一篇组件之slot内容分发实例详解
2016/09/09 Javascript
node.js路径处理方法以及绝对路径详解
2021/03/04 Javascript
原生js实现图片放大缩小计时器效果
2017/01/20 Javascript
创建Vue项目以及引入Iview的方法示例
2018/12/03 Javascript
VUE 实现复制内容到剪贴板的两种方法
2019/04/24 Javascript
详解django模板与vue.js冲突问题
2019/07/07 Javascript
python命令行参数解析OptionParser类用法实例
2014/10/09 Python
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
2017/08/18 Python
Python文件操作基本流程代码实例
2017/12/11 Python
详解python中Numpy的属性与创建矩阵
2018/09/10 Python
python实现指定文件夹下的指定文件移动到指定位置
2018/09/17 Python
Django框架组成结构、基本概念与文件功能分析
2019/07/30 Python
Python xlrd excel文件操作代码实例
2020/03/10 Python
opencv 图像滤波(均值,方框,高斯,中值)
2020/07/08 Python
Python的轻量级ORM框架peewee使用教程
2021/02/05 Python
numpy实现RNN原理实现
2021/03/02 Python
接口可以包含哪些成员
2012/09/30 面试题
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
2016/01/12 面试题
2014乡镇领导班子四风对照检查材料思想汇报
2014/10/05 职场文书
2015年度质量工作总结报告
2015/04/27 职场文书
解决MySQL存储时间出现不一致的问题
2021/04/28 MySQL
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
2021/06/26 MySQL
Windows Server 2019 配置远程控制以及管理方法
2022/04/28 Servers