为了账号安全,请及时绑定邮箱和手机立即绑定

Django rest框架中ViewSet和GenericViewSet的区别

Django rest框架中ViewSet和GenericViewSet的区别

跃然一笑 2021-11-09 18:27:57
我有一个 Django 休息框架GenericViewset,我试图为它设置分页,如下所示:#settings.pyREST_FRAMEWORK = {    'DEFAULT_PAGINATION_CLASS':          'rest_framework.pagination.PageNumberPagination',    'PAGE_SIZE': 20}#views.pyclass PolicyViewSet(viewsets.GenericViewSet):    def list(self, request):        queryset = Policy.objects.all()        page = self.paginate_queryset(queryset)        serializer = PolicySerializer(page, many=True)        return self.get_paginated_response(serializer.data)这按预期工作。 但是,如果我尝试使用普通的Viewset执行相同的操作,如下所示:#views.pyclass PolicyViewSet(viewsets.ViewSet):    def list(self, request):        queryset = Policy.objects.all()        page = self.paginate_queryset(queryset)        serializer = PolicySerializer(page, many=True)        return self.get_paginated_response(serializer.data)我收到一条错误消息:'PolicyViewSet' 对象没有属性 'paginate_queryset'如何使用普通的Viewset设置分页。DRF 中的 GenericViewset 和 Viewset 有什么区别?
查看完整描述

3 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

只有在使用通用视图或视图集时才会自动执行分页

阅读文档

并回答你的第二个问题 DRF 中的 GenericViewset 和 Viewset 有什么区别

DRF 有两个主要的处理视图的系统:

  1. APIView:这提供了一些处理方法,来处理HTTP动词:getpostputpatch,和delete

  2. ViewSet:这是对 APIView 的抽象,它提供操作作为方法:

    • list:只读,返回多个资源(http 动词:)get。返回一个字典列表。

    • retrieve:只读,单一资源(http 动词:get,但需要一个 id)。返回单个字典。

    • create:创建一个新的资源(HTTP动词:post

    • update/partial_update:编辑资源(HTTP动词:put/patch

    • destroy:删除一个资源(HTTP动词:delete

  3. GenericViewSetGenericViewSet有很多,最常见的是ModelViewSet. 他们继承GenericAPIView并具有全面实施所有的行动listretrievedestroyupdated,等等。当然,你也可以挑选其中的一些,阅读文档


查看完整回答
反对 回复 2021-11-09
?
HUH函数

TA贡献1836条经验 获得超4个赞

也只是从 GenericViewSet 继承。例如:


#views.py

class PolicyViewSet(viewsets.ViewSet, viewsets.GenericViewSet):

    def list(self, request):

        queryset = Policy.objects.all()

        page = self.paginate_queryset(queryset)

        serializer = PolicySerializer(page, many=True)

        return self.get_paginated_response(serializer.data)


查看完整回答
反对 回复 2021-11-09
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

如何使用普通视图集设置分页?

如果你想在你的视图集中使用“pagination_class”,那么你应该使用GenericViewSet而不是ViewSet


查看完整回答
反对 回复 2021-11-09
  • 3 回答
  • 0 关注
  • 385 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信