Django无法访问raw_post_data

时间:2014-03-13 02:54:27

标签: python django django-1.6

我遇到了Django的奇怪事情,这是我的views.py:

def api(request):
    return HttpResponse("%s %s" % (request.method,request.raw_post_data))

现在我使用POSTMAN(谷歌浏览器的小应用程序)进行HTTP POST。

我将POSTMAN设置为在原始字段中使用'test'发出POST请求。

Django给我三个不同的东西(随机):

有时Django会在某个时候返回'GET',有时候会回复:

AttributeError at /
'WSGIRequest' object has no attribute 'raw_post_data'
Request Method: GET
Request URL:    https://api.mywebsiteurl.com/
Django Version: 1.6.2
Exception Type: AttributeError
Exception Value:    
'WSGIRequest' object has no attribute 'raw_post_data'
Exception Location: /home/spice_dj/spice/views.py in api, line 17
Python Executable:  /usr/bin/python
Python Version: 2.7.3
Python Path:    
['/usr/local/lib/python2.7/dist-packages/South-0.8.4-py2.7.egg',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-linux2',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/home/spice_dj']
Server time:    Wed, 12 Mar 2014 22:51:11 -0400
  1. 当我明确发出POST请求时,为什么Django会给我'GET'?

  2. 为什么会给我这个错误?

  3. 为什么它不会返回我在原始字段中设置的'测试'?

1 个答案:

答案 0 :(得分:38)

根据django 1.6 deprecation timeline

  

属性HttpRequest.raw_post_data已重命名为   1.4中的HttpRequest.body。向后兼容性将被删除 -   HttpRequest.raw_post_data将不再有效。

动机在relevant ticket

中描述
  

request.raw_post_dat a是一个坏名字。它与POST无关   特别是,它只是HTTP请求的主体。这令人困惑   用户,并使它看起来像Django不懂HTTP   作品。我们应该将名称更改为request.body并启动   弃用过程。

使用request.body

def api(request):
    return HttpResponse("%s %s" % (request.method, request.body))

希望有所帮助。