zoukankan      html  css  js  c++  java
  • DRF内置分页器及自定义分页类

    分页Pagination

    REST framework提供了分页的支持。

    全局配置

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

    REST_FRAMEWORK = {
        ...
      # 全局分页,一旦设置了全局分页,那么我们drf中的视图扩展类里面的list方法提供的列表页都会产生分页的效果。所以一般不用全局分页
        'DEFAULT_PAGINATION_CLASS':  'rest_framework.pagination.PageNumberPagination',
        
        'PAGE_SIZE': 2  # 每页显示两条数据
        
        ...
    }
    

    局部配置

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

    from rest_framework.pagination import PageNumberPagination
    
    
    # 自定义分页类
    class LargeResultsSetPagination(PageNumberPagination):
        # 默认每页显示10条数据
        page_size = 10
        
        # 根据'page_size'关键字自定义每页显示多少条数据
        page_size_query_param = 'page_size'
        
        # 自定义'pag'关键字查询具体某一页的数据(默认为'page')
        # 如:?pag=3 即查询第三页的数据
        page_query_param = 'pag'
        
        # 每页最多显示15条数据
        # 克制 ?page_size=20,这样自定义无效,每页最多显示15条数据
        max_page_size = 15
        
        
        
    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 前端最多能设置的每页数量
    # 声明分页的配置类
    from rest_framework.pagination import PageNumberPagination
    class StandardPageNumberPagination(PageNumberPagination):
        # 默认每页显示10条数据
        page_size = 10
        
        # 根据'page_size'关键字自定义每页显示多少条数据
        page_size_query_param = 'page_size'
        
        # 自定义'pag'关键字查询具体某一页的数据(默认为'page')
        # 如:?pag=3 即查询第三页的数据
        page_query_param = 'pag'
        
        # 每页最多显示15条数据
        # 克制 ?page_size=20,这样自定义无效,每页最多显示15条数据
        max_page_size = 15
        
        
    class StudentAPIView(ListAPIView):
        queryset = Student.objects.all()
        serializer_class = StudentModelSerializer
        
        pagination_class = StandardPageNumberPagination
    
    # 127.0.0.1/four/students/?pag=1&page_size=5
    

    2)LimitOffsetPagination

    前端访问网址形式:#其实就是通过偏移量来取数据

    GET http://127.0.0.1/four/students/?limit=100&offset=400  #从下标为400的记录开始,取100条记录
    

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

    • default_limit 默认限制,每页数据量大小,默认值与PAGE_SIZE设置一致
    • limit_query_param limit参数名,默认'limit' , 可以通过这个参数来改名字
    • offset_query_param offset参数名,默认'offset' ,可以通过这个参数来改名字
    • max_limit 最大limit限制,默认None, 无限制
    from rest_framework.pagination import LimitOffsetPagination
    class StandardLimitOffsetPagination(LimitOffsetPagination):
        # 默认每一页查询的数据量,类似上面的page_size
        default_limit = 2
        limit_query_param = "size"
        offset_query_param = "start"
    
    class StudentAPIView(ListAPIView):
        queryset = Student.objects.all()
        serializer_class = StudentModelSerializer
        # 调用页码分页类
        # pagination_class = StandardPageNumberPagination
        # 调用查询偏移分页类
        pagination_class = StandardLimitOffsetPagination
    
  • 相关阅读:
    Codevs 2296 仪仗队 2008年省队选拔赛山东
    Codevs 1535 封锁阳光大学
    Codevs 1069 关押罪犯 2010年NOIP全国联赛提高组
    Codevs 1218 疫情控制 2012年NOIP全国联赛提高组
    Codevs 1684 垃圾陷阱
    洛谷 P1108 低价购买
    Vijos P1325桐桐的糖果计划
    Codevs 3289 花匠 2013年NOIP全国联赛提高组
    Codevs 2611 观光旅游(floyed最小环)
    C语言基础之彩色版C语言(内含linux)
  • 原文地址:https://www.cnblogs.com/fengting0913/p/13522777.html
Copyright © 2011-2022 走看看