解决Django的request.POST获取不到内容的问题

 更新时间:2018年05月28日 09:23:33   作者:NoneSec  
今天小编就为大家分享一篇解决Django的request.POST获取不到内容的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

我通过如下的一段程序发送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中的序列化详细解析

    这篇文章主要介绍了Python中的序列化详细解析,序列化是指把程序中的一个类转化成一个标准化的格式,标准化的意义是这个格式可以跨程序,跨平台的被使用,而且保持其原有的内容,规范,需要的朋友可以参考下
    2023-11-11
  • 使用 Python 实现微信消息的一键已读的思路代码

    使用 Python 实现微信消息的一键已读的思路代码

    利用python可以实现微信消息的一键已读功能,怎么实现呢?你肯定会想着很复杂,但是python的好处就是很多人已经把接口打包做好了,只需要调用即可,今天通过本文给大家分享使用 Python 实现微信消息的一键已读的思路代码,一起看看吧
    2021-06-06
  • 详解python datetime模块

    详解python datetime模块

    这篇文章主要介绍了python datetime模块的相关资料,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-08-08
  • python爬虫开发之Request模块从安装到详细使用方法与实例全解

    python爬虫开发之Request模块从安装到详细使用方法与实例全解

    这篇文章主要介绍了python爬虫开发之Request模块从安装到详细使用方法与实例全解,需要的朋友可以参考下
    2020-03-03
  • 关于pandas.DataFrame的类SQL操作

    关于pandas.DataFrame的类SQL操作

    这篇文章主要介绍了关于pandas.DataFrame的类SQL操作方式,具有很好的参考价值,希望对大家有所帮助,
    2023-08-08
  • Python简洁优雅的推导式示例详解

    Python简洁优雅的推导式示例详解

    这篇文章主要给大家介绍了关于Python简洁优雅的推导式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • OpenCV 绘制同心圆的示例代码

    OpenCV 绘制同心圆的示例代码

    本文主要介绍了OpenCV 绘制同心圆的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • python实现kmp算法的实例代码

    python实现kmp算法的实例代码

    这篇文章主要介绍了python实现kmp算法的实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • pandas使用get_dummies进行one-hot编码的方法

    pandas使用get_dummies进行one-hot编码的方法

    今天小编就为大家分享一篇pandas使用get_dummies进行one-hot编码的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python ORM框架SQLAlchemy学习笔记之关系映射实例

    Python ORM框架SQLAlchemy学习笔记之关系映射实例

    这篇文章主要介绍了Python ORM框架SQLAlchemy学习笔记之关系映射实例,Classic (经典模式)和Modern (现代模式),分别介绍了,需要的朋友可以参考下
    2014-06-06

最新评论