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)
    
  • 相关阅读:
    R-CNN/Fast R-CNN/Faster R-CNN
    RNN的介绍
    前向传播算法(Forward propagation)与反向传播算法(Back propagation)
    world转.md
    msgid 属性
    .equals()到底是什么意思?
    iperf详细使用方法
    c语言#define用法
    android源码编译出现No private recovery resources for TARGET_DEVICE解决方法
    nginx File not found 错误
  • 原文地址:https://www.cnblogs.com/zenan/p/10721695.html
Copyright © 2011-2022 走看看