• 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)
    
  • 相关阅读:
    DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践
    UVA10071 Back to High School Physics
    UVA10071 Back to High School Physics
    UVA10055 Hashmat the Brave Warrior
    UVA10055 Hashmat the Brave Warrior
    UVA458 The Decoder
    UVA458 The Decoder
    HDU2054 A == B ?
    HDU2054 A == B ?
    POJ3414 Pots
  • 原文地址:https://www.cnblogs.com/robert-zhou/p/10651736.html
Copyright © 2020-2023  润新知