zoukankan      html  css  js  c++  java
  • Django-DRF分页器

    drf内置了三种分页器

    PageNumberPagination:普通分页(用的最多)
    LimitOffsetPagination:偏移分页(用的第二多)
    CursorPagination:游标分页(在数据类很大情况下使用,因为使用游标,所以查询最快,但是只能查当前页的前后各一页)
    

    三个基类的位置

    from rest_framework.pagination import PageNumberPagination
    from rest_framework.pagination import LimitOffsetPagination
    from rest_framework.pagination import CursorPagination
    

    分页模式有两种APIView和GenericAPIView+ListModelMixin,当视图继承APIView,需要自己重写get,post等方法,写法有所不同

    GenericAPIView+ListModelMixin的分页模式:

    1.PageNumberPagination

    PageNumberPagination:普通分页(用的最多)
    # 在默认中的类中,四个属性的默认设置
    page_size = api_settings.PAGE_SIZE  # 每页显示多少条
    page_query_param = 'page'           # 查询参数
    page_size_query_param = size        # 查询的时候指定每页显示多少条
    max_page_size = 10                # 每页最多显示多少条
    # 使用方式:
    -定义一个类,继承PageNumberPagination,重写四个属性
    class MyPageNumberPagination(PageNumberPagination):
        page_size = 3
        page_query_param = 'page'
        page_size_query_param = 'size'
        max_page_size = 5
        
    -在继承了GenericAPIView+ListModelMixin视图类中配置
        pagination_class = MyPageNumberPagination
    -查询
        http://127.0.0.1:8000/students/?page=1&size=5
    

    2.LimitOffsetPagination

    LimitOffsetPagination:偏移分页
    -default_limit = api_settings.PAGE_SIZE  # 默认条数
    -limit_query_param = 'limit'             # 查询时,指定查询多少条
    -offset_query_param = 'offset'           # 查询时,指定的起始位置是哪 
    -max_limit = None                        # 查询时,最多返回多少条
    
    # 使用方式:
    -定义一个类,继承LimitOffsetPagination,重写四个属性
    class MyLimitOffsetPagination(LimitOffsetPagination):
        default_limit = 2  # 默认条数
        limit_query_param = 'limit'  # 查询时,指定查询多少条
        offset_query_param = 'offset'  # 查询时,指定的起始位置是哪
        max_limit = 5  # 查询时,最多返回多少条
    -在继承了GenericAPIView+ListModelMixin视图类中配置
    pagination_class = MyPageNumberPagination
    -查询
    http://127.0.0.1:8000/students/?limit=100&offset=1
    

    3.CursorPagination

    CursorPagination:游标分页(速度块)
    -cursor_query_param = 'cursor'  # 查询的时候,指定的查询方式
    -page_size = api_settings.PAGE_SIZE # 每页显示多少条
    -ordering = '-created'   # 排序方式
    -page_size_query_param = size  # 查询的时候指定每页显示多少条
    -max_page_size = None          #每页最多显示多少条
    
    # 使用方式:
    -定义一个类,CursorPagination,重写四个属性
    class MyCursorPagination(CursorPagination):
        cursor_query_param = 'cursor'  # 查询的时候,指定的查询方式
        page_size = 2  # 每页显示多少条
        ordering = 'id'  # 排序方式,一定要指定排序方式,就是model中的可以排序的字段
    	page_size_query_param=size
        max_page_size=10
        
    -在继承了GenericAPIView+ListModelMixin视图类中配置
    pagination_class = MyCursorPagination
    -查询
    http://127.0.0.1:8000/students/  # 啥都不加,因为只能上一页或者下一页,无法指定第几页
    

    APIView的分页模式

    -新建一个类,继承普通分页,重写四个属性
    
    -视图类写法如下
    class StudentApiView(APIView):
        def get(self,request):
            student_list=Student.objects.all()
            page=MyPageNumberPagination()# 实例化得到对象
            # 只需要换不同的分页类即可
            res=page.paginate_queryset(student_list,request,self)# 开始分页
            ser=StudentSerializer(res,many=True)
            return page.get_paginated_response(ser.data) # 返回数据
    
  • 相关阅读:
    .Net 多线程小结
    VIM 入门操作
    C语言中的数据
    对scanf和printf的研究!!
    C语言常用的编程规范
    ORACLE GOLDEN GATE oracle同步数据至kafka
    mysql5.7关于使用到OR是否会用到索引并提高查询效率的探讨
    sysbench安装
    percona数据库监控工具的安装部署
    redhat6 快速部署percona
  • 原文地址:https://www.cnblogs.com/chiyun/p/14066735.html
Copyright © 2011-2022 走看看