GenericViewSet
该GenericViewSet班由继承GenericAPIView,并提供了默认设置get_object,get_queryset方法及其他通用视图基地的行为,但不包括默认情况下,任何动作。为了使用GenericViewSet类,您将覆盖该类并混合所需的mixin类,或明确定义动作实现
ModelViewSet
ModelViewSet类所继承GenericAPIView,并包括用于各种动作实现方式中,通过在各种混入类的行为混合。由提供的动作ModelViewSet类是.list(),.retrieve(), .create(),.update(),.partial_update(),和.destroy()。
因为ModelViewSet扩展GenericAPIView,您通常需要至少提供queryset和serializer_class属性。例如:
class AccountViewSet(viewsets.ModelViewSet):
"""
A simple ViewSet for viewing and editing accounts.
"""
queryset = Account.objects.all()
serializer_class = AccountSerializer
permission_classes = [IsAccountAdminOrReadOnly]
也可以使用由提供的任何标准属性或方法覆盖GenericAPIView。例如,要使用ViewSet动态确定它应该操作的查询集,可以执行以下操作:
class AccountViewSet(viewsets.ModelViewSet):
"""
A simple ViewSet for viewing and editing the accounts
associated with the user.
"""
serializer_class = AccountSerializer
permission_classes = [IsAccountAdminOrReadOnly]
def get_queryset(self):
return self.request.user.accounts.all()
虽然此类默认提供完整的create / list / retrieve / update / destroy操作集,但仍然可以使用标准权限类来限制可用操作