Skip to main content
 首页 » 编程设计

python之在 Django Rest Framework 端点方法中使用@staticmethod

2025年01月19日30sxdcgaq8080

我应该将 Django Rest Framework APIView 的 post、get 等方法定义为静态的吗?

class HomeView(APIView): 
    def get(request): 
        etc... 

或

class HomeView(APIView): 
    @staticmethod 
    def get(request): 
        etc... 

每种方式的优缺点是什么?

谢谢

请您参考如下方法:

DRF 不会将 get 和 post 声明为静态方法,您也不应该将其声明为静态方法。以下是 DRF 泛型中默认值的配置方式。

在 DRF 中,从 get 和 post 中引用实例方法很常见,例如 self.get_object 和 self.get_serializer 。

class CreateAPIView(mixins.CreateModelMixin, 
                    GenericAPIView): 
    """ 
    Concrete view for creating a model instance. 
    """ 
    def post(self, request, *args, **kwargs): 
        return self.create(request, *args, **kwargs) 
 
 
class ListAPIView(mixins.ListModelMixin, 
                  GenericAPIView): 
    """ 
    Concrete view for listing a queryset. 
    """ 
    def get(self, request, *args, **kwargs): 
        return self.list(request, *args, **kwargs) 
 
 
class RetrieveAPIView(mixins.RetrieveModelMixin, 
                      GenericAPIView): 
    """ 
    Concrete view for retrieving a model instance. 
    """ 
    def get(self, request, *args, **kwargs): 
        return self.retrieve(request, *args, **kwargs) 
 
 
class DestroyAPIView(mixins.DestroyModelMixin, 
                     GenericAPIView): 
    """ 
    Concrete view for deleting a model instance. 
    """ 
    def delete(self, request, *args, **kwargs): 
        return self.destroy(request, *args, **kwargs) 
 
 
class UpdateAPIView(mixins.UpdateModelMixin, 
                    GenericAPIView): 
    """ 
    Concrete view for updating a model instance. 
    """ 
    def put(self, request, *args, **kwargs): 
        return self.update(request, *args, **kwargs) 
 
    def patch(self, request, *args, **kwargs): 
        return self.partial_update(request, *args, **kwargs)