• 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速度最快,但用的少,适用于数据量多
  • 相关阅读:
    小程序动态修改页面标题setNavigationBarTitle
    webapi发布在iis之后报错Http 403.14 error
    vue调用子组件方法时,参数传不过去
    Echarts中X轴坐标太密集,分段显示
    使用echarts时,鼠标首次移入屏幕会闪动,全屏会出现滚动条
    js关于数组的操作(合并数组、添加数组、循环等)
    在vue项目中使用echarts
    npm i安装命令中的-g -D -S的区别
    ArcGIS api for JS 实现三维飞行漫游功能
    Vue通过EventBus实现兄弟组件间通信
  • 原文地址:https://www.cnblogs.com/bailongcaptain/p/13296189.html
Copyright © 2020-2023  润新知