2014-12-04 2 views
5

У меня возникли проблемы с публикацией в моем API и я не могу понять, что это за ошибка. Если это имеет значение, я использую Django REST и включил трассировку.Объект 'WSGIRequest' не имеет атрибутов 'data'

if (repeat == false) { 
    post_data = {'User': usernameInput} 
    $.ajax({ 
     type: 'POST', 
     url: '/0/addUser', 
     data: post_data, 
     async: true 
    }) 
} 

class AddUser(APIView): 
    def post(self, request, format = None): 
     serializer = UserSerializer(data=request.data) 
     if serializer.isvalid(): 
      serializer.save() 
      return Response(serializer.data, status=status.HTTP_201_CREATED) 


Traceback: 
File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in get_response 
    111.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/Library/Python/2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view 
    57.   return view_func(*args, **kwargs) 
File "/Library/Python/2.7/site-packages/django/views/generic/base.py" in view 
    69.    return self.dispatch(request, *args, **kwargs) 
File "/Library/Python/2.7/site-packages/rest_framework/views.py" in dispatch 
    403.    response = self.handle_exception(exc) 
File "/Library/Python/2.7/site-packages/rest_framework/views.py" in dispatch 
    400.    response = handler(request, *args, **kwargs) 
File "/Users/rae/Desktop/112/djangotemplate/notes/views.py" in post 
    23.  serializer = UserSerializer(data=request.data) 
File "/Library/Python/2.7/site-packages/rest_framework/request.py" in __getattr__ 
    436.   return getattr(self._request, attr) 

ответ

8

Django REST Framework имеет свой собственный Request объект, который облегает HttpRequest объект, переданный в Джанго и добавляет некоторые дополнительные функции (например, пользовательские рендеринга и другой слой аутентификации). Если какие-либо свойства доступны на объекте Request, которые не существуют, он автоматически проксирует его на базовый HttpRequest, поэтому обычно вы не замечаете разницы.

В ФПИ 2.x, то Request свойство имеет DATA и FILES свойства, которые хранят переданные в данных, а также любые файлы, которые были обнаружены. Они были объединены в DRF 3.0 и заменены одним свойством data. Когда DRF 3.0 был выпущен, вся документация теперь отражает новое свойство Request.data.

Возможно, вы используете Django REST Framework 2.x, но вы пытаетесь получить доступ к новому свойству, представленному в DRF 3.0. Поскольку он не существует на объекте Request, он проксируется до объекта HttpRequest, где он также не найден.

+7

Я использую 3.0.4 и получаю ту же ошибку. Я использую промежуточное программное обеспечение для хранения запроса на отладку, а в 'process_response', пытающемся вызвать' request.data', дает мне ошибку «нет атрибута». Идеи? – awidgery

+0

Я использую DRF 3.5.3 с djangorestframework-jwt 1.9.0, а также вижу эту ошибку. Есть предположения? –

Смежные вопросы