Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在django rest框架中自定义视图句柄POST和DELETE方法_Python_Django_Django Rest Framework - Fatal编程技术网

Python 在django rest框架中自定义视图句柄POST和DELETE方法

Python 在django rest框架中自定义视图句柄POST和DELETE方法,python,django,django-rest-framework,Python,Django,Django Rest Framework,我创建了一个可以处理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':

我创建了一个可以处理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方法吗?

使用(继承自APIView),它提供了一些方法,例如
get\u serializer\u class
,在这些方法中,您可以实现方法
valid\u 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