Kam*_*i81 8 python django django-rest-framework
如果数据库中不存在对象,则DRF当前具有抛出404的功能.例如
Request: /delete/1234
Response: 204 (success)
Request 2: /delete/1234
Response: 404 (not found)
Run Code Online (Sandbox Code Playgroud)
这个逻辑对我的移动应用程序来说非常有问题,我想改变它,以便我覆盖404未找到的功能.换句话说,我希望我的请求是幂等的.例如:
Request: /delete/1234
Response: 204 (success)
Request 2: /delete/1234
Response: 204 (success)
Run Code Online (Sandbox Code Playgroud)
我一直在看文档,但我不确定如何覆盖get_object_or_404
功能.
Tev*_*K O 17
我相信,如果没有要删除的对象,理想情况下它应该像DRF那样返回404.
根据您的要求,以下代码可以解决问题:
from rest_framework import status,viewsets
from rest_framework.response import Response
from django.http import Http404
class ExampleDestoryViewset(viewset.ModelViewSet):
def destroy(self, request, *args, **kwargs):
try:
instance = self.get_object()
self.perform_destroy(instance)
except Http404:
pass
return Response(status=status.HTTP_204_NO_CONTENT)
Run Code Online (Sandbox Code Playgroud)
要实现自定义功能,您需要覆盖get_object()
视图集中的方法。按照链接get_object和perform_destroy
class ExampleDestoryViewset(viewset.ModelViewSet):
queryset = # queryset
serializer_class = # serializer class
def get_queryset(self):
# write custom code
def perform_destroy(self, instance):
# write custom code
Run Code Online (Sandbox Code Playgroud)