2017-05-15 80 views
3

我正在使用Django Rest框架。在我看來,這就引發了像request instance has no attribute 'data'這樣的錯誤,我嘗試了很多,沒有找到任何東西。我必須添加任何中間件或其他東西嗎? DRF如何從request.POST和request.GET中檢索數據。我的觀點是基於功能的。Django rest框架request.data引發錯誤

def list(request, format=None): 
    if request.method == 'POST': 
     serializer = CustomerSerializer(data=request.data) 
     if serializer.is_valid(): 
      serializer.save() 
      return Response(serializer.data, status=status.HTTP_201_CREATED) 
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 
+0

http://stackoverflow.com/help/how-to-ask – ChidG

+1

你能告訴我們你的代碼? – giaco

+0

你使用什麼方法? 'request'只有POST,PUT和PATCH方法的數據值。如果你在GET上嘗試它,你需要使用request.query_params。 –

回答

4

@api_view裝飾missing.To在DRF獲得request.data,要麼你必須調用裝飾@api_view,或者如果您使用的是基於功能視圖從 的APIView類中延伸,rest_framework使用api_view裝飾

。裝飾導入api_view

@api_view 
def list(request): 
    if request.method == 'POST': 
     serializer = CustomerSerializer(data=request.data) 
     if serializer.is_valid(): 
      serializer.save() 
      return Response(serializer.data, status=status.HTTP_201_CREATED) 
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

對於基於類視圖從APIView

延伸
from rest_framework.views import APIView 

class List(APIView): 

    def post(self, request): 
     serializer = CustomerSerializer(data=request.data) 
     if serializer.is_valid(): 
      serializer.save() 
      return Response(serializer.data, status=status.HTTP_201_CREATED) 
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

文檔:DRF request

+0

它工作了很多。非常感謝 – zappier