解决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操作数据库之sqlite3打开数据库、删除、修改示例
Mar 13 Python
Python中使用 Selenium 实现网页截图实例
Jul 18 Python
对于Python编程中一些重用与缩减的建议
Apr 14 Python
Python的组合模式与责任链模式编程示例
Feb 02 Python
Python系统监控模块psutil功能与经典用法分析
May 24 Python
python2与python3共存问题的解决方法
Sep 18 Python
学习python可以干什么
Feb 26 Python
python查询文件夹下excel的sheet名代码实例
Apr 02 Python
python 实现简单的FTP程序
Dec 27 Python
aws 通过boto3 python脚本打pach的实现方法
May 10 Python
Python偏函数Partial function使用方法实例详解
Jun 17 Python
Python中json.load()和json.loads()有哪些区别
Jun 07 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中error_reporting()函数的用法(修改PHP屏蔽错误)
2011/07/01 PHP
WordPress开发中的get_post_custom()函数使用解析
2016/01/04 PHP
php HTML无刷新提交表单
2016/04/05 PHP
使用PHPMailer发送邮件实例
2017/02/15 PHP
全面解析PHP面向对象的三大特征
2017/06/10 PHP
PHP实现的大文件切割与合并功能示例
2018/04/10 PHP
关于图片的预加载过程中隐藏未知的
2012/12/19 Javascript
一个JavaScript处理textarea中的字符成每一行实例
2014/09/22 Javascript
JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
2014/10/17 Javascript
原生js和jQuery写的网页选项卡特效对比
2015/04/27 Javascript
seajs加载jquery时提示$ is not a function该怎么解决
2015/10/23 Javascript
jquery.validate 自定义验证方法及validate相关参数
2016/01/18 Javascript
谈谈JavaScript中的几种借用方法
2016/08/09 Javascript
Vue.JS入门教程之自定义指令
2016/12/08 Javascript
vue router-link传参以及参数的使用实例
2017/11/10 Javascript
使用live-server快速搭建本地服务器+自动刷新的方法
2018/03/09 Javascript
JavaScript遍历数组和对象的元素简单操作示例
2019/07/09 Javascript
[43:53]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.22
2019/09/05 DOTA
[03:12]完美世界DOTA2联赛PWL DAY6集锦
2020/11/05 DOTA
wxpython 学习笔记 第一天
2009/03/16 Python
linux系统使用python监测网络接口获取网络的输入输出
2014/01/15 Python
由浅入深讲解python中的yield与generator
2017/04/05 Python
python的格式化输出(format,%)实例详解
2018/06/01 Python
python操作mysql代码总结
2018/06/01 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
Pytorch中的VGG实现修改最后一层FC
2020/01/15 Python
html5组织内容_动力节点Java学院整理
2017/07/10 HTML / CSS
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
购买正版游戏和游戏激活码:Green Man Gaming
2019/11/06 全球购物
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
护士自我鉴定
2013/10/23 职场文书
工作会议欢迎词
2014/01/16 职场文书
大学生村官工作总结2015
2015/04/09 职场文书
餐厅开业活动方案
2019/07/08 职场文书
python实现自动化群控的步骤
2021/04/11 Python
pytorch 如何使用batch训练lstm网络
2021/05/28 Python