解决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求解水仙花数的方法
May 11 Python
在Python中用split()方法分割字符串的使用介绍
May 20 Python
基于wxpython实现的windows GUI程序实例
May 30 Python
Python安装官方whl包和tar.gz包的方法(推荐)
Jun 04 Python
python笔记:mysql、redis操作方法
Jun 28 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
Nov 30 Python
Python3读取Excel数据存入MySQL的方法
May 04 Python
python3实现爬取淘宝美食代码分享
Sep 23 Python
Python 实现两个服务器之间文件的上传方法
Feb 13 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
Aug 08 Python
Django contrib auth authenticate函数源码解析
Nov 12 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
Dec 05 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二维数组的去重问题解析
2011/07/17 PHP
php开启openssl的方法
2014/05/15 PHP
thinkphp中字符截取函数msubstr()用法分析
2016/01/09 PHP
php生成微信红包数组的方法
2019/09/05 PHP
PHP基于array_unique实现二维数组去重
2020/07/14 PHP
setTimeout和setInterval的区别你真的了解吗?
2011/03/31 Javascript
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
2011/07/31 Javascript
经过绑定元素时会多次触发mouseover和mouseout事件
2014/02/28 Javascript
使用jQuery简单实现模拟浏览器搜索功能
2014/12/21 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
javascript滚轮事件基础实例讲解(37)
2017/02/14 Javascript
angularjs实现下拉列表的选中事件示例
2017/03/03 Javascript
Vue.js 2.0中select级联下拉框实例
2017/03/06 Javascript
利用jQuery解析获取JSON数据
2017/04/08 jQuery
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
[01:00:53]OG vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python基础教程之基本数据类型和变量声明介绍
2014/08/29 Python
Python的Flask框架应用调用Redis队列数据的方法
2016/06/06 Python
python编写弹球游戏的实现代码
2018/03/12 Python
python执行系统命令后获取返回值的几种方式集合
2018/05/12 Python
对Python中内置异常层次结构详解
2018/10/18 Python
解决Python运行文件出现out of memory框的问题
2018/12/03 Python
使用IPython或Spyder将省略号表示的内容完整输出
2020/04/20 Python
python简单实现9宫格图片实例
2020/09/03 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
利用CSS3 动画 绘画 圆形动态时钟
2018/03/20 HTML / CSS
C#和SQL Server的面试题
2016/08/12 面试题
Python中如何定义一个函数
2016/09/06 面试题
大学生期末自我鉴定
2014/02/01 职场文书
小学开学典礼主持词
2014/03/19 职场文书
房屋租赁协议书范本
2014/04/10 职场文书
《最大的麦穗》教学反思
2014/04/17 职场文书
学校法制宣传月活动总结
2014/07/03 职场文书
工作汇报开头与结尾怎么写
2014/11/08 职场文书
工人先锋号事迹材料(2016精选版)
2016/03/01 职场文书
Go各时间字符串使用解析
2021/04/02 Golang