Python 我返回带有“status=HTTP\u 404\u NOT\u FOUND”的响应,但找到201

Python 我返回带有“status=HTTP\u 404\u NOT\u FOUND”的响应,但找到201,python,django,Python,Django,在views.py中,我返回状态为HTTP\u 404\u NOT\u FOUND的响应: class CloudServerCreateAPIView(CreateAPIView): serializer_class = CloudServerCreateSerializer permission_classes = [] queryset = CloudServer.objects.all() def perform_create(self, seriali

在views.py中,我返回状态为HTTP\u 404\u NOT\u FOUND的响应:

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时,我得到的是创建的
HTTP201
,而不是
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
}

您的404逻辑不应存在于perform_create中。执行创建主要用于注入您在别处计算的数据或特定于用户的数据

例如
serializer.save(user=self.request.user,date\u 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)

您的404逻辑不应存在于perform_create中。执行创建主要用于注入您在别处计算的数据或特定于用户的数据

例如
serializer.save(user=self.request.user,date\u 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)