Django не может получить доступ к raw_post_data

Я чувствую странную вещь с Django, вот мой view.py:

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

Теперь я делаю HTTP POST с POSTMAN (небольшое приложение для google chrome).

Я установил POSTMAN для запроса POST с "тестом" в необработанном поле.

Django возвращает мне 3 разные вещи (случайные):

Когда-то 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
  • Почему Django возвращает мне "GET", когда я четко делаю запрос POST?

  • Почему это возвращает мне эту ошибку?

  • Почему он не возвращает мне "тест", который я установил в необработанном поле?

Ответы

Ответ 1

Согласно django 1.6 временная шкала устаревания:

Атрибут HttpRequest.raw_post_data был переименован в HttpRequest.body в 1.4. Обратная совместимость будет удалена - HttpRequest.raw_post_data больше не будет работать.

Мотивация описана в соответствующем билете :

request.raw_post_dat a - плохое имя. Это не имеет никакого отношения к POST в в частности, это всего лишь тело HTTP-запроса. Это смущает пользователей, и делает его похожим на Django, не понимает, как HTTP работает. Мы должны изменить имя на request.body и начать процесс устаревания.

Используйте request.body:

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

Надеюсь, что это поможет.