解决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下进行UDP网络编程的教程
Apr 29 Python
Python检测一个对象是否为字符串类的方法
May 21 Python
详解Python中映射类型的内建函数和工厂函数
Aug 19 Python
基于Python实现对PDF文件的OCR识别
Aug 05 Python
详解python的几种标准输出重定向方式
Aug 15 Python
如何安装并使用conda指令管理python环境
Jul 10 Python
pytorch自定义初始化权重的方法
Aug 17 Python
pytorch的梯度计算以及backward方法详解
Jan 10 Python
python实现ftp文件传输系统(案例分析)
Mar 20 Python
Python是什么 Python的用处
May 26 Python
如何完美的建立一个python项目
Oct 09 Python
Python3 多线程(连接池)操作MySQL插入数据
Jun 09 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的curl实现get和post的代码
2008/08/23 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
2014/12/15 PHP
php中Redis的应用--消息传递
2017/03/28 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
2018/05/12 PHP
js的event详解。
2006/09/06 Javascript
Javascript引用指针使用介绍
2012/11/07 Javascript
css transform 3D幻灯片特效实现步骤解读
2013/03/27 Javascript
jQuery中after的两种用法实例
2013/07/03 Javascript
不得不分享的JavaScript常用方法函数集(下)
2015/12/25 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
2016/06/16 Javascript
javascript 中iframe高度自适应(同域)实例详解
2017/05/16 Javascript
vue-cli2.x项目优化之引入本地静态库文件的方法
2018/06/19 Javascript
Vue页面跳转动画效果的实现方法
2018/09/23 Javascript
详解Vue组件插槽的使用以及调用组件内的方法
2018/11/13 Javascript
详解Vue依赖收集引发的问题
2019/04/22 Javascript
vue路由守卫+登录态管理实例分析
2019/05/21 Javascript
vuex实现购物车的增加减少移除
2020/06/28 Javascript
JavaScript 中的六种循环方法
2021/01/06 Javascript
python自动化脚本安装指定版本python环境详解
2017/09/14 Python
1分钟快速生成用于网页内容提取的xslt
2018/02/23 Python
pandas pivot_table() 按日期分多列数据的方法
2018/11/16 Python
使用python制作一个为hex文件增加版本号的脚本实例
2019/06/12 Python
python 实现二维字典的键值合并等函数
2019/12/06 Python
python 中值滤波,椒盐去噪,图片增强实例
2019/12/18 Python
css3 盒模型以及box-sizing属性全面了解
2016/09/20 HTML / CSS
基于 HTML5 Canvas实现 的交互式地铁线路图
2018/03/05 HTML / CSS
北美大型运动类产品商城:Champs Sports
2017/01/12 全球购物
台湾家适得:Homeget
2019/02/11 全球购物
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
linux面试题参考答案(3)
2012/09/13 面试题
大学生求职简历的自我评价
2013/10/14 职场文书
合作意向协议书范本
2014/03/31 职场文书
班组拓展活动方案
2014/08/14 职场文书
维稳工作情况汇报
2014/10/27 职场文书
2015年新教师工作总结
2015/04/28 职场文书
nginx设置资源请求目录的方式详解
2022/05/30 Servers