2014-12-04 21 views
5

Mam problem z publikowaniem w moim interfejsie API i nie mogę dokładnie określić, do czego odnosi się błąd. Jeśli to ma znaczenie, używam Django REST i uwzględniłem traceback.Obiekt "WSGIRequest" nie ma atrybutu "dane"

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) 

Odpowiedz

8

Django REST ramowa ma własną Request obiekt, która otacza obiekt HttpRequest przekazany w przez Django i dodaje kilka dodatkowych funkcjonalności (jak niestandardowego renderowania i inną warstwę uwierzytelniania). Jeśli jakiekolwiek właściwości są dostępne na obiekcie Request, które nie istnieją, zostanie ono automatycznie przydzielone serwerowi bazowemu do podstawowego HttpRequest, więc zazwyczaj nie zauważysz różnicy.

W DRF 2.x, właściwość Request ma właściwości DATA i FILES, które przechowują przekazane dane, jak również wszelkie wykryte pliki. Zostały one połączone w DRF 3.0 i zastąpione jedną właściwością data. Wraz z wydaniem DRF 3.0 cała dokumentacja odzwierciedla teraz nową właściwość Request.data.

Wygląda na to, że korzystasz z Django REST Framework 2.x, ale próbujesz uzyskać dostęp do nowej właściwości wprowadzonej w DRF 3.0. Ponieważ nie istnieje on w obiekcie Request, jest on proxy do obiektu HttpRequest, gdzie również go nie znaleziono.

+7

Używam wersji 3.0.4 i otrzymuję ten sam błąd. Używam oprogramowania pośredniego do przechowywania żądania debugowania, a w 'process_response' próbie wywołania' request.data' jest błąd "brak atrybutu" danych. Pomysły? – awidgery

+0

Używam DRF 3.5.3 z djangorestframework-jwt 1.9.0 i widzę ten błąd. jakieś pomysły? –

Powiązane problemy