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
    
  • 相关阅读:
    mock of python
    Linux系统有7个运行级别(runlevel)
    linux下gsoap的初次使用
    python的sitecustomize.py妙用
    blkid命令 获取文件系统类型、UUID
    linux的一些核心配置文件
    Linux网卡配置与绑定
    CentOS 5.4 制作 Python 2.6 RPM 包的方法
    学会理解并编辑fstab
    HTTP协议通信过程汇总
  • 原文地址:https://www.cnblogs.com/fengting0913/p/13522777.html
Copyright © 2011-2022 走看看