2014-12-04 17 views
5

Ho problemi con la pubblicazione sulla mia API e non riesco a capire a cosa si riferisce l'errore. Se è importante, sto usando Django REST e incluso il traceback.L'oggetto 'WSGIRequest' non ha attributo '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) 

risposta

8

Django REST quadro ha una sua Request oggetto che avvolge l'oggetto HttpRequest passata da Django e aggiunge alcune funzionalità aggiuntive (come il rendering personalizzato e un altro strato di autenticazione). Se si accede a qualsiasi proprietà sull'oggetto Request che non esiste, verrà automaticamente proxy al sottostante HttpRequest, quindi in genere non si nota la differenza.

In DRF 2.x, la proprietà ha RequestDATA e FILES proprietà che memorizzare i passavano nei dati così come tutti i file che sono stati rilevati. Questi sono stati combinati in DRF 3.0 e sostituiti con una singola proprietà data. Quando è stato rilasciato DRF 3.0, tutta la documentazione ora riflette la nuova proprietà Request.data.

Sembra che tu stia utilizzando Django REST Framework 2.x, ma stai tentando di accedere alla nuova proprietà introdotta in DRF 3.0. Poiché non esiste sull'oggetto Request, viene eseguito il proxy verso l'oggetto HttpRequest, dove non è stato trovato.

+7

Sto usando 3.0.4 e sto ottenendo lo stesso errore. Sto usando un middleware per archiviare la richiesta di debug e in 'process_response' provare a chiamare' request.data' mi dà l'errore 'no attribute 'data''. Idee? – awidgery

+0

Sto usando DRF 3.5.3 con djangorestframework-jwt 1.9.0 e vedo anche questo errore. qualche idea? –

Problemi correlati