解决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中多线程及程序锁浅析
Jan 21 Python
用Python编写生成树状结构的文件目录的脚本的教程
May 04 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
Mar 13 Python
python调用fortran模块
Apr 08 Python
python编写Logistic逻辑回归
Dec 30 Python
解决python写入mysql中datetime类型遇到的问题
Jun 21 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
May 29 Python
基于Python的图像数据增强Data Augmentation解析
Aug 13 Python
python实现逆滤波与维纳滤波示例
Feb 26 Python
python实现AHP算法的方法实例(层次分析法)
Sep 09 Python
python处理写入数据代码讲解
Oct 22 Python
python中filter,map,reduce的作用
Jun 10 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版(1)
2006/10/09 PHP
PHP+MySQL之Insert Into数据插入用法分析
2015/09/27 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
2017/05/23 PHP
在JavaScript中使用inline函数的问题
2007/03/08 Javascript
JQuery中基础过滤选择器用法实例分析
2015/05/18 Javascript
跟我学习javascript的循环
2015/11/18 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
2016/10/09 Javascript
JavaScript ES6中CLASS的使用详解
2016/11/22 Javascript
React Router基础使用
2017/01/17 Javascript
JS匹配日期和时间的正则表达式示例
2017/05/12 Javascript
Angular2使用Angular-CLI快速搭建工程(二)
2017/05/21 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
2017/06/13 Javascript
微信小程序组件之srcoll-view的详解
2017/10/19 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
2018/12/22 jQuery
jQuery each和js forEach用法比较
2019/02/27 jQuery
轻松解决JavaScript定时器越走越快的问题
2019/05/13 Javascript
使用layui实现的左侧菜单栏以及动态操作tab项方法
2019/09/10 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
2020/10/02 Javascript
vue3.0自定义指令(drectives)知识点总结
2020/12/27 Vue.js
[54:29]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第二场
2018/04/09 DOTA
python结合API实现即时天气信息
2016/01/19 Python
简介Python设计模式中的代理模式与模板方法模式编程
2016/02/02 Python
Python入门之三角函数tan()函数实例详解
2017/11/08 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
2018/02/03 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
Tornado实现多进程/多线程的HTTP服务详解
2019/07/25 Python
如何基于python生成list的所有的子集
2019/11/11 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
2020/03/23 Python
Python 多线程共享变量的实现示例
2020/04/17 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
基于HTML5的WebGL经典3D虚拟机房漫游动画
2017/11/15 HTML / CSS
全世界最美丽的四星和五星级酒店预订:Prestigia.com
2017/11/15 全球购物
早晨薰衣草在线女性精品店:Morning Lavender
2021/01/04 全球购物
高二学生评语大全
2014/04/25 职场文书
乡镇团代会开幕词
2016/03/04 职场文书
浅谈MySql update会锁定哪些范围的数据
2022/06/25 MySQL