zoukankan      html  css  js  c++  java
  • django rest framework pagination

    REST framework 包含对可定制分页样式的支持。这使你可以将较大的结果集分成单独的数据页面。

    分页 API 支持:

    • 以分页链接的形式作为响应内容的一部分。
    • 以分页链接的形式包含在响应的 header 中,如 Content-Range 或 Link.
      内置的样式目前是以分页链接的形式作为响应内容的一部分。使用可浏览的 API 时,此样式更易于访问。

    分页仅在你使用通用视图或视图集时自动执行。如果你使用的是常规 APIView,则需要自己调用分页 API 以确保返回分页响应。示例请参阅 mixins.ListModelMixin 和 generics.GenericAPIView 类的源代码。

    可以通过将分页类设置为 None,关闭分页。

    设置分页样式

    分页样式可以使用 DEFAULT_PAGINATION_CLASS 和 PAGE_SIZE setting key 全局设置。例如,要使用内置的 page_size/page 分页,你可以这样做:

    REST_FRAMEWORK = {
        'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
        'PAGE_SIZE': 10
    }
    

    继承viewsets.GenericViewSet,设置pagination_class属性即可。

    自定义分页样式:

    要创建自定义分页序列化类,你应该继承 pagination.BasePagination 并覆盖 paginate_queryset(self, queryset, request, view=None) 和 get_paginated_response(self, data) 方法:

    • paginate_queryset 方法被传递给初始查询集,并且应该返回一个只包含请求页面中的数据的可迭代对象。
    • get_paginated_response 方法传递序列化的页面数据,并返回一个 Response 实例。
      请注意,paginate_queryset 方法可以在分页实例上设置状态,而后 get_paginated_response 方法可以使用它。

    我们可以基于APIView自行实现分页。

    # app/views.py
    class DemoAPIView(APIView):
        def get(self, request, *args, **kwargs):
            from task.models import Task
            from task.serializers import TaskSerializer
            queryset = Task.objects.all().order_by("id")
            pg = PageNumberPagination()
            pg_queryset = pg.paginate_queryset(queryset=queryset,request=request,view=self)
            serializer = TaskSerializer(pg_queryset,many=True)
    
            # serializer.is_valid(raise_exception=True)
            # data = serializer.validated_data
            # return Response(data=serializer.data)
            return pg.get_paginated_response(serializer.data)
    
  • 相关阅读:
    测试
    mysql数据库 select语句全集
    Markdown文本的书写格式详解--有道云笔记
    mysql数据忘记库密码
    最新版mysql基本命令操作
    Python从入门到放弃
    第二阶段冲刺
    周总结15
    找水王
    用户体验评价
  • 原文地址:https://www.cnblogs.com/zenan/p/10721695.html
Copyright © 2011-2022 走看看