Python 我返回带有“status=HTTP\u 404\u NOT\u FOUND”的响应,但找到201
在views.py中,我返回状态为HTTP\u 404\u NOT\u FOUND的响应: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
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)