在Django rest fram中自定义视图句柄POST和DELETE方法

2024-10-01 19:16:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个可以处理POST和DELETE方法的视图

class MyView(APIView): 
    def valid_method(self,data):
        method = self.request.method 
        if method == 'POST':           
            ser = self.PostSerializer(data=data)       
        elif method == 'DELETE':           
            ser = self.DeleteSerializer(data=data)        
        else:           
            raise MethodValidationError(errormessage)       
        return ser       
    def post(self, request):       
        ser = self.valid_method(dara = request.data)        
        other code    
    def delete(self, request):       
        ser = self.valid_method(dara = request.data)
        other code

有没有更好的方法来实现MyView?我应该创建一个新的基础视图吗?或者有没有简单的方法在APIView中定义合法的HTTP方法


Tags: 方法self视图datarequestdefdeletepost
1条回答
网友
1楼 · 发布于 2024-10-01 19:16:38

使用GenericAPIView(继承自APIView),它提供了get_serializer_class等方法,您可以在其中实现方法valid_method中的逻辑

示例

from rest_framework.generics import GenericAPIView


class CustomGenericAPIView(GenericAPIView):
    serializer_class = None

    def get_serializer_class(self, *args, **kwargs):
        request_method = self.request.method
        if request_method == "POST":
            return self.PostSerializer
        elif request.method == "DELETE":
            return self.DeleteSerializer
        else:
            return super().get_serializer_class(*args, **kwargs)

    def post(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        # rest of the code

相关问题 更多 >

    热门问题