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))
Надеюсь, что это поможет.