解决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实现随机密码字典生成器示例
Apr 09 Python
用python + openpyxl处理excel2007文档思路以及心得
Jul 14 Python
Python基础入门之seed()方法的使用
May 15 Python
Python自定义函数定义,参数,调用代码解析
Dec 27 Python
详解python异步编程之asyncio(百万并发)
Jul 07 Python
利用Python如何制作好玩的GIF动图详解
Jul 11 Python
django与小程序实现登录验证功能的示例代码
Feb 19 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
Mar 05 Python
python RC4加密操作示例【测试可用】
Sep 26 Python
Python collections中的双向队列deque简单介绍详解
Nov 04 Python
使用pandas 将DataFrame转化成dict
Dec 10 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
Sep 01 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
yii实现图片上传及缩略图生成的方法
2014/12/04 PHP
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
2015/12/14 PHP
php获取'/'传参的值简单方法
2017/07/13 PHP
PHP的mysqli_select_db()函数讲解
2019/01/23 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/02/09 Javascript
javascript 带有滚动条的表格,标题固定,带排序功能.
2009/11/13 Javascript
javascript 得到变量类型的函数
2010/05/19 Javascript
jQuery UI Dialog控件中的表单无法正常提交的解决方法
2010/12/19 Javascript
面向对象Javascript核心支持代码分享
2012/05/23 Javascript
JavaScript的Module模式编程深入分析
2013/08/13 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
2013/12/03 Javascript
JS简单计算器实例
2015/01/20 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
jQuery插件开发的五种形态小结
2015/03/04 Javascript
jquery选择器简述
2015/08/31 Javascript
jquery操作select元素和option的实例代码
2016/02/03 Javascript
JS+Canvas 实现下雨下雪效果
2016/05/18 Javascript
js倒计时简单实现代码
2016/08/11 Javascript
BooStrap对导航条的改造实践小结
2016/09/21 Javascript
详解vue数据渲染出现闪烁问题
2017/06/29 Javascript
node.js Promise对象的使用方法实例分析
2019/12/26 Javascript
Python中用altzone()方法处理时区的教程
2015/05/22 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
2017/07/06 Python
Python 解决中文写入Excel时抛异常的问题
2018/05/03 Python
基于python3实现倒叙字符串
2020/02/18 Python
Python HTTP下载文件并显示下载进度条功能的实现
2020/04/02 Python
django中related_name的用法说明
2020/05/20 Python
使用Keras预训练模型ResNet50进行图像分类方式
2020/05/23 Python
python文件排序的方法总结
2020/09/13 Python
招聘与培训专员岗位职责
2014/01/30 职场文书
询价采购方案
2014/06/09 职场文书
学校教师读书活动总结
2014/07/08 职场文书
销售内勤岗位职责
2015/02/10 职场文书
经典励志格言:每日一句,让你每天充满能量
2019/08/16 职场文书
Nginx 反向代理解决跨域问题多种情况分析
2022/01/18 Servers
MySQL分区以及建索引的方法总结
2022/04/13 MySQL