解决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中pygame模块用法实例
Oct 09 Python
详解Python中的装饰器、闭包和functools的教程
Apr 02 Python
进一步探究Python中的正则表达式
Apr 28 Python
Python3连接MySQL(pymysql)模拟转账实现代码
May 24 Python
python异常和文件处理机制详解
Jul 19 Python
python去除扩展名的实例讲解
Apr 23 Python
Python基于SMTP协议实现发送邮件功能详解
Aug 14 Python
在OpenCV里使用Camshift算法的实现
Nov 22 Python
Tensorflow的常用矩阵生成方式
Jan 04 Python
Python+Appium实现自动抢微信红包
May 21 Python
Jupyter Notebook内使用argparse报错的解决方案
Jun 03 Python
基于Python实现将列表数据生成折线图
Mar 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
re0第二季蕾姆被制作组打入冷宫!艾米莉亚女主扶正,原因唏嘘
2020/04/02 日漫
PHP 第三节 变量介绍
2012/04/28 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
JavaScript 浏览器验证代码(来自discuz)
2010/07/17 Javascript
jQuery EasyUI API 中文文档 - Parser 解析器
2011/09/29 Javascript
js中的onchange和onpropertychange (onchange无效的解决方法)
2014/03/08 Javascript
jQuery.each使用详解
2015/07/07 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
2016/05/20 Javascript
相册展示PhotoSwipe.js插件实现
2016/08/25 Javascript
JS实现拖动滚动条评分的效果代码分享
2016/09/29 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
nodejs实现邮件发送服务实例分享
2017/03/29 NodeJs
详解Vue 普通对象数据更新与 file 对象数据更新
2017/04/26 Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
2019/12/07 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
javascript实现简单页面倒计时
2021/03/02 Javascript
实例讲解Python中函数的调用与定义
2016/03/14 Python
Python爬虫:通过关键字爬取百度图片
2017/02/17 Python
python利用不到一百行代码实现一个小siri
2017/03/02 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
2017/12/21 Python
Django中的ajax请求
2018/10/19 Python
对python3中, print横向输出的方法详解
2019/01/28 Python
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
Python3 mmap内存映射文件示例解析
2020/03/23 Python
python针对Oracle常见查询操作实例分析
2020/04/30 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
CSS3 清除浮动的方法示例
2018/06/01 HTML / CSS
韩国休闲女装品牌网站:ANAIS
2016/08/24 全球购物
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
工程造价专业大专生求职信
2013/10/06 职场文书
建筑实习自我鉴定
2013/10/18 职场文书
市政工程技术专业自荐书
2014/07/06 职场文书
ktv服务员岗位职责
2015/02/09 职场文书
漂亮妈妈观后感
2015/06/08 职场文书
XX部保密工作制度范本
2019/08/27 职场文书
详解MySQL的Seconds_Behind_Master
2021/05/18 MySQL