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)
    
  • 相关阅读:
    什么才是java的基础知识?
    Java的背景、影响及前景
    设计模式分类
    关于日期及日期格式转换的记录
    添加同名工具后台验证后不跳转且保留用户输入的数值
    案件讨论回复中出现把多个附件当成一个评论显示,导致分页出错
    指令发布详情弹窗实现“取消”按钮
    最大间隔分离超平面的唯一性完整证明
    CART算法与剪枝原理
    Spark MLlib学习
  • 原文地址:https://www.cnblogs.com/zenan/p/10721695.html
Copyright © 2011-2022 走看看