zoukankan      html  css  js  c++  java
  • drf分页器

    drf分页器

    1.第一种分页:
        类似于django中的分页
    2.第二种分页:
        偏移分页
    3.第三种分页:
        加密分页(查询速度快)
        无法跳跃
    

    基本参数

    from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination
    
    page_size #每页显示的数量
    
    page_query_param = 'page'  #/?page=2 查询的key
    
    #指定当前页显示多少条
    page_size_query_param#/?page=2&size=5 取第2页,显示5条
    
    #当前页显示最多条数
    max_page_size
    

    第一种分页

    from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination
    
    #实例化产生一个分页对象
    page = PageNumberPagination()
    
    #第一个参数:要分页的数据,第二个参数,request,第三个参数,当前视图对象
    page_list = page.paginate_queryset(book_list,request,self)#self为视图
    
    #再序列化的时候,用分页之后的数据
    ser = Myserializer(instance=page_list,many=True)
    paginate_queryset
    

    第二种分页,偏移分页

    #默认每页显示多少
    default_limit = 2
    
    #标杆 /?offset=2&limit=3 以2位基础,显示3条 
    
    offset_query_param='offset'
    
    limit_query_param = 'limit'
    
    #每页显示的最大条数
    max_limit = 5
    
    from rest_framework.pagination import LimitOffsetPagination
    
    #实例化产生一个分页对象
    page = LimitOffsetPagination()
    
    #第一个参数:要分页的数据,第二个参数,request,第三个参数,当前视图对象
    page_list = page.paginate_queryset(book_list,request,self)#self为视图
    
    #再序列化的时候,用分页之后的数据
    ser = Myserializer(instance=page_list,many=True)
    paginate_queryset
    

    第三种分页(加密分页)

    #按nid排序
    page.ordering = 'nid'
    #查询的key值
    cursor_query_param = 'cursor'
    #每页显示多少条
    page_size = 2
    

    使用

    1.生成对象(可以修改对象的属性)
    2.ret = 对象.paginate_queryset()
    3.丢到序列化类中,完成序列化
    

    修改默认参数的两种方法

    1.自定义分页类,继承PageNumberPagination
    2.产生page = PageNumberPagination()对象后
    page.page_size=5
    page.page_query_param = 'size'
    

    练习

    from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination
    from rest_framework.views import APIView
    from django.http import JsonResponse
    class Infos(APIView):
        def get(self,request,*args,**kwargs):
            res_page = int(request.query_params.get('page',0))
            conn = get_redis_connection()
            obj_li = []
            for key,value in conn.hscan_iter('dic1',count=1000):
                 k =key.decode('utf-8')
                 v = value.decode('utf-8')
                 obj_li.append({k:v})
            page = PageNumberPagination()
            page.page_size = 120
            max_page =int(len(obj_li)/page.page_size)
            if res_page > max_page:
                return HttpResponse('超过最大页数')
            page_list = page.paginate_queryset(obj_li,request,self)
            return JsonResponse(page_list,safe=False)
    
  • 相关阅读:
    ftp>ls 未连接
    Error running 'run': data.userName must not be null
    Excel另存为_有些Excel打开时会出现一些提示
    23种设计模式通俗理解
    清除html中的标记,只留下文字
    将DataTable中的数据导出成Excel
    C#读取文件
    系统性能瓶颈分析
    Angularjs的My97DatePicker扩展
    Memcache修改端口
  • 原文地址:https://www.cnblogs.com/robert-zhou/p/10651736.html
Copyright © 2011-2022 走看看