我应该将 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)
