解决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使用rsa加密算法模块模拟新浪微博登录
Jan 22 Python
Python 实现使用dict 创建二维数据、DataFrame
Apr 13 Python
python实现对指定输入的字符串逆序输出的6种方法
Apr 26 Python
Python 异常处理Ⅳ过程图解
Oct 18 Python
python被修饰的函数消失问题解决(基于wraps函数)
Nov 04 Python
Python大数据之从网页上爬取数据的方法详解
Nov 16 Python
Python yield生成器和return对比代码实例
Apr 20 Python
python实现npy格式文件转换为txt文件操作
Jul 01 Python
Django正则URL匹配实现流程解析
Nov 13 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
Dec 21 Python
python的变量和简单数字类型详解
Sep 15 Python
人工智能深度学习OpenAI baselines的使用方法
May 20 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
深入file_get_contents与curl函数的详解
2013/06/25 PHP
zend framework文件上传功能实例代码
2013/12/25 PHP
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
简单了解WordPress开发中update_option()函数的用法
2016/01/11 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
2016/11/16 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
Thinkphp5框架ajax接口实现方法分析
2019/08/28 PHP
利用javascript移动div层-javascript 拖动层
2009/03/22 Javascript
ASP小贴士/ASP Tips javascript tips可以当桌面
2009/12/10 Javascript
jQuery 点击图片跳转上一张或下一张功能的实现代码
2010/03/12 Javascript
javascript下对于事件、事件流、事件触发的顺序随便说说
2010/07/17 Javascript
jQeury淡入淡出需要注意的问题
2010/09/08 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
JavaScript实现基于Cookie的存储类实例
2015/04/10 Javascript
每天一篇javascript学习小结(属性定义方法)
2015/11/19 Javascript
js实现瀑布流的三种方式比较
2020/06/28 Javascript
原生JS实现圆环拖拽效果
2017/04/07 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
2020/04/08 Javascript
[01:09:50]VP vs Pain 2018国际邀请赛小组赛BO2 第二场
2018/08/20 DOTA
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
python数据挖掘需要学的内容
2019/06/23 Python
使用pandas实现连续数据的离散化处理方式(分箱操作)
2019/11/22 Python
Python判断三段线能否构成三角形的代码
2020/04/12 Python
python中get和post有什么区别
2020/06/19 Python
世界上最好的威士忌和烈性酒购买网站:The Whisky Exchange
2016/11/20 全球购物
为什么UNION ALL比UNION快
2016/03/17 面试题
公司活动邀请函
2014/01/24 职场文书
学习全国两会精神心得体会范文
2014/03/17 职场文书
2015新年寄语(一句话)
2014/12/08 职场文书
golang内置函数len的小技巧
2021/07/25 Golang
Redis集群节点通信过程/原理流程分析
2022/03/18 Redis
Python测试框架pytest高阶用法全面详解
2022/06/01 Python