2017-11-10 9 views
0

を見つけ、私はstatus=HTTP_404_NOT_FOUNDとレスポンスを返す:私は、ステータス `とレスポンスを返す= HTTP_404_NOT_FOUND`が、views.pyで201

class CloudServerCreateAPIView(CreateAPIView): 
    serializer_class = CloudServerCreateSerializer 
    permission_classes = [] 
    queryset = CloudServer.objects.all() 

    def perform_create(self, serializer): 

     return Response(data="There is no data left.", status=HTTP_404_NOT_FOUND, exception=Exception()) 

     serializer.save() 

をしかし、私はAPIを要求したとき、私はHTTP 201 Created、ない404を取得します:

POST /api/user_productmanage/cloudserver/create/ 
HTTP 201 Created 
Allow: POST, OPTIONS 
Content-Type: application/json 
Vary: Accept 

{ 
    "expiration_time": "2017-12-11T11:11:11+08:00", 
    "profile": "asdas", 
    "buytime": 1, 
    "availablearea": 2 
} 

答えて

2

あなたの404ロジックはperform_createには存在しません。 Performの実行は、主に他の場所やユーザー固有のデータを挿入するために使用されます。

たとえばserializer.save(user=self.request.user, date_time=datetime.now())です。

ロジックをcreateまたはpostメソッドに移動してみてください。私の提案はpostに移動することです。

class CloudServerCreateAPIView(CreateAPIView): 
    serializer_class = CloudServerCreateSerializer 
    permission_classes = [] 
    queryset = CloudServer.objects.all() 

    def create(self, request, *args, **kwargs): 
     # Your reason for 404 
     # if reason: 
     #  # return Response(status=status.HTTP_404_NOT_FOUND) 
     serializer = self.get_serializer(data=request.data) 
     serializer.is_valid(raise_exception=True) 
     self.perform_create(serializer) 
     headers = self.get_success_headers(serializer.data) 
     return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) 

    def post(self, request, *args, **kwargs): 
     # Your reason for 404 
     if reason: 
      return Response(data="There is no data left.", status=HTTP_404_NOT_FOUND, exception=Exception()) 
     return self.create(request, *args, **kwargs) 
関連する問題