• 分页Pagination


    分页Pagination

    REST framework提供了分页的支持。

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

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

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

    from rest_framework.pagination import PageNumberPagination
    class LargeResultsSetPagination(PageNumberPagination):
        page_size = 1000  #一页的条数
        #接口中选择页码的字段名,一般不做修改,默认第三页 -- 接口: ?page=1
        page_query_parm = 'page' 
        #用户可以通过接口自定义一页条数-- ?page=1&page_size=条数
        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://api.example.org/books/?page=4
    可以在子类中定义的属性:
    
    - page_size 每页数目
    - page_query_param 前端发送的页数关键字名,默认为"page"
    - page_size_query_param 前端发送的每页数目关键字名,默认为None
    - max_page_size 前端最多能设置的每页数量
    from rest_framework.pagination import PageNumberPagination
    
    class StandardPageNumberPagination(PageNumberPagination):
        page_size_query_param = 'page_size'
        max_page_size = 10
    
    class BookListView(ListAPIView):
        queryset = BookInfo.objects.all().order_by('id')
        serializer_class = BookInfoSerializer
        pagination_class = StandardPageNumberPagination
    
    # 127.0.0.1/books/?page=1&page_size=2

     2)LimitOffsetPagination

    前端访问网址形式:

    GET http://api.example.org/books/?limit=100&offset=400
    接口: ?offset=0&limit3  从第一条往后查3条

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

    • default_limit 默认限制,默认值与PAGE_SIZE设置一直

    • limit_query_param limit参数名,默认'limit'

    • offset_query_param offset参数名,默认'offset'

    • max_limit 最大limit限制,默认None

    #paginations.py
    from rest_framework.pagination import LimitOffsetPagination
    class LimitOffsetPagination(LimitOffsetPagination):
        default_limit = 1000  #一页的条数
        limit_query_parm = 'limit' 
        offset_query_param = 'offset'
        #用户可以自定义最大的条数,超过就采用最大值
        max_page_size = 10000
        
    class BookListView(ListAPIView):
        queryset = BookInfo.objects.all().order_by('id')
        serializer_class = BookInfoSerializer
        pagination_class = paginations.LimitOffsetPagination    
    
    # 127.0.0.1:8000/books/?offset=3&limit=2

     3) CoursorPagination

    #上一页和下一页都是加密的
    #paginations.py
    from rest_framework.pagination import CoursorPagination
    class CoursorPagination(pagination.CoursorPagination):
        page_size = 2  #一页的条数
        #请求页码数据的字段,字段后的参数是加密的
        cursor_query_parm = 'cursor' 
        #用户自定义一页条数的字段
        page_size_query_param = 'page_size'
        #用户可以自定义最大的条数,超过就采用最大值
        max_page_size = 4
        #默认数据查询的排序条件-不能与drf的ordering组件同时使用
        ordering = '-id'
        
     class BookListView(ListAPIView):
        queryset = BookInfo.objects.all().order_by('id')
        serializer_class = BookInfoSerializer
        pagination_class = paginations.CoursorPagination    
  • 相关阅读:
    Poj 2406--Power Strings(KMP)
    杭电2682--Tree(Prim)
    杭电1827--Summer Holiday(SCC + 缩点)
    杭电2181--哈密顿绕行世界问题(Dfs)
    杭电1269--迷宫城堡(强连通分量)
    南阳21--三个水杯(Bfs)
    杭电1203--I NEED A OFFER!(01背包)
    e.send和next(e)的区别
    python中yield与return的用法与区别
    迭代器
  • 原文地址:https://www.cnblogs.com/HZLS/p/11406466.html
Copyright © 2020-2023  润新知