解决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面向对象编程中类的继承
Jun 17 Python
Tensorflow环境搭建的方法步骤
Feb 07 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
Oct 14 Python
python微信好友数据分析详解
Nov 19 Python
python保存字典和读取字典的实例代码
Jul 07 Python
pandas的连接函数concat()函数的具体使用方法
Jul 09 Python
pandas 选取行和列数据的方法详解
Aug 08 Python
python全局变量引用与修改过程解析
Jan 07 Python
Python动态强类型解释型语言原理解析
Mar 25 Python
Python离线安装各种库及pip的方法
Nov 28 Python
用Python的绘图库(matplotlib)绘制小波能量谱
Apr 17 Python
Pandas实现批量拆分与合并Excel的示例代码
May 30 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
jQuery+php简单实现全选删除的方法
2016/11/28 PHP
php使用curl下载指定大小的文件实例代码
2017/09/30 PHP
PHP常见过waf webshell以及最简单的检测方法
2019/05/21 PHP
JavaScript 对象模型 执行模型
2010/10/15 Javascript
js字符串转成JSON
2013/11/07 Javascript
jQuery响应enter键的实现思路
2014/04/18 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
Node.js中child_process实现多进程
2015/02/03 Javascript
jQuery实现二级下拉菜单效果
2016/01/05 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
基于jQuery实现表格内容的筛选功能
2016/08/21 Javascript
JS简单实现仿百度控制台输出信息效果
2016/09/04 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
Angular2仿照微信UI实现9张图片上传和预览的示例代码
2017/10/19 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
JS中的一些常用的函数式编程术语
2019/06/15 Javascript
Flutter 超实用简单菜单弹出框 PopupMenuButton功能
2019/08/06 Javascript
国内常用的js类库大全(CDN公共库)
2020/06/24 Javascript
python实现字典(dict)和字符串(string)的相互转换方法
2017/03/01 Python
Python字符串匹配之6种方法的使用详解
2019/04/08 Python
Python编程快速上手——Excel表格创建乘法表案例分析
2020/02/28 Python
python3 logging日志封装实例
2020/04/08 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
2020/08/18 Python
python time.strptime格式化实例详解
2021/02/03 Python
CSS3实现歌词进度文字颜色填充变化动态效果的思路详解
2020/06/02 HTML / CSS
德购商城:德国进口直邮商城
2017/06/13 全球购物
瑜伽国际:Yoga International
2018/04/18 全球购物
三个Unix的命令面试题
2015/04/12 面试题
经典广告词大全
2014/03/14 职场文书
跳蚤市场口号
2014/06/13 职场文书
科技工作者先进事迹
2014/08/16 职场文书
村班子对照检查材料
2014/08/18 职场文书
农村文化建设标语
2014/10/07 职场文书
质检员岗位职责
2015/02/03 职场文书
毕业生对母校寄语
2015/02/26 职场文书
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL