解决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回调函数中使用多线程的方法
Dec 25 Python
python如何实现内容写在图片上
Mar 23 Python
基于Python列表解析(列表推导式)
Jun 23 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
Jul 11 Python
Python Django 命名空间模式的实现
Aug 09 Python
python中hasattr()、getattr()、setattr()函数的使用
Aug 16 Python
Django实现分页显示效果
Oct 31 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
Jan 16 Python
基于matplotlib xticks用法详解
Apr 16 Python
解决keras backend 越跑越慢问题
Jun 18 Python
Python常驻任务实现接收外界参数代码解析
Jul 21 Python
Python实现JS解密并爬取某音漫客网站
Oct 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
用javascript实现的仿Flash广告图片轮换效果
2007/04/24 Javascript
JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布
2009/10/29 Javascript
改进版通过Json对象实现深复制的方法
2012/10/24 Javascript
js数组的操作详解
2013/03/27 Javascript
用js通过url传参把数据从一个页面传到另一个页面
2014/09/01 Javascript
Jquery修改页面标题title其它JS失效的解决方法
2014/10/31 Javascript
JavaScript DOM事件(笔记)
2015/04/08 Javascript
js使用DOM操作实现简单留言板的方法
2015/04/10 Javascript
带有定位当前位置的百度地图前端web api实例代码
2016/06/21 Javascript
js 获取元素所有兄弟节点的实现方法
2016/09/06 Javascript
Bootstrap栅格系统学习笔记
2016/11/25 Javascript
浅谈jQuery before和insertBefore的区别
2016/12/04 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
如何提高数据访问速度
2016/12/26 Javascript
详解javascript中对数据格式化的思考
2017/01/23 Javascript
Angular6中使用Swiper的方法示例
2018/07/09 Javascript
AngularJS ui-router刷新子页面路由的方法
2018/07/23 Javascript
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
手写Vue弹窗Modal的实现代码
2019/09/11 Javascript
jQuery操作元素的内容和样式完整实例分析
2020/01/10 jQuery
node运行js获得输出的三种方式示例详解
2020/07/02 Javascript
微信小程序通过websocket实时语音识别的实现代码
2020/08/19 Javascript
Python深入学习之内存管理
2014/08/31 Python
Python Pandas批量读取csv文件到dataframe的方法
2018/10/08 Python
对python遍历文件夹中的所有jpg文件的实例详解
2018/12/08 Python
对Python信号处理模块signal详解
2019/01/09 Python
python的range和linspace使用详解
2019/11/27 Python
Pytorch实现基于CharRNN的文本分类与生成示例
2020/01/08 Python
关于TensorFlow新旧版本函数接口变化详解
2020/02/10 Python
python 实现在shell窗口中编写print不向屏幕输出
2020/02/19 Python
python使用pandas抽样训练数据中某个类别实例
2020/02/28 Python
conda安装tensorflow和conda常用命令小结
2021/02/20 Python
Opodo英国旅游网站:预订廉价航班、酒店和汽车租赁
2018/07/14 全球购物
莫斯科隐形眼镜网上商店:Linzi
2019/07/22 全球购物
Clos19英国:高档香槟、葡萄酒和烈酒在线购物平台
2020/07/10 全球购物
JS实现简单控制视频播放倍速的实例代码
2021/04/18 Javascript