• 08 drf分页器


    分页

    REST framework提供了分页的支持。

    我们可以在配置文件中设置全局的分页方式,如:

    REST_FRAMEWORK = {
        'DEFAULT_PAGINATION_CLASS':  'rest_framework.pagination.PageNumberPagination',
        'PAGE_SIZE': 100  # 每页数目
    }
    

    也可以自定义Pagination类,来为视图添加不同分页行为。在视图中通过pagination_clas属性来指明。

    class LargeResultsSetPagination(PageNumberPagination):
        page_size = 1000
        page_size_query_param = 'page_size'
        max_page_size = 10000
    class BookDetailView(RetrieveAPIView):
        queryset = BookInfo.objects.all()
        serializer_class = BookInfoSerializer
        pagination_class = LargeResultsSetPagination
    

    关闭分页功能,只需在视图内设置

    pagination_class = None
    

    1) PageNumberPagination

    前端访问网址形式:

    GET  http://127.0.0.1:8000/students/?page=4
    

    可以在子类中定义的属性:

    • page_size 每页数目
    • page_query_param 前端发送的页数关键字名,默认为”page”
    • page_size_query_param 前端发送的每页数目关键字名,默认为None
    • max_page_size 前端最多能设置的每页数量
    class MyPageNumberPagination(PageNumberPagination):
        #http://127.0.0.1:8000/api/books2/?aaa=1&size=6
        page_size=3  #每页条数
        page_query_param='aaa' #查询第几页的key
        page_size_query_param='size' # 每一页显示的条数
        max_page_size=5    # 每页最大显示条数
    

    2)LimitOffsetPagination

    前端访问网址形式:

    GET http://127.0.0.1/four/students/?limit=100&offset=400
    

    可以在子类中定义的属性:

    • default_limit 默认限制,默认值与PAGE_SIZE设置一直
    • limit_query_param limit参数名,默认’limit’
    • offset_query_param offset参数名,默认’offset’
    • max_limit 最大limit限制,默认None
     class MyLimitOffsetPagination(LimitOffsetPagination):
         default_limit = 3   # 每页条数
         limit_query_param = 'limit' # 往后拿几条
         offset_query_param = 'offset' # 标杆
         max_limit = 5   # 每页最大几条
    

    3)CursorPagination

    前端访问网址形式:

    GET http://127.0.0.1/four/students/?cursor=cD0xNQ%3D%3D
    

    可以在子类中定义的属性:

    • cursor_query_param:默认查询字段,不需要修改
    • page_size:每页数目
    • ordering:按什么排序,需要指定
    class MyCursorPagination(CursorPagination):
        cursor_query_param = 'cursor'  # 每一页查询的key
        page_size = 2   # 每页显示的条数
        ordering = '-id'  # 排序字段
    

    总结:

    • PageNumber这种最常用
    • LimitOffsetPagination 一般
    • CursorPagination速度最快,但用的少,适用于数据量多
  • 相关阅读:
    window.open的火狐、谷歌兼容写法
    一个分数怎样约分?想知道的速度了。。。
    这是第二道题内容要求写一个银行的ATM系统 这个浪费了好长时间 ,遇到了许多问题,不过都解决了,上程序
    两个有理数相加(要求输入时以分数形式,输出时也以分数形式)
    linux centos 7.5下 源码编译安装 lua环境
    SecureCRT 6.7 vim高亮
    C#第一章笔记
    HTML5考试错题
    第九章博客
    第八章博客
  • 原文地址:https://www.cnblogs.com/bailongcaptain/p/13296189.html
Copyright © 2020-2023  润新知