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)
    
  • 相关阅读:
    poj 1743 Musical Theme 后缀数组
    poj 1743 Musical Theme 后缀数组
    cf 432D Prefixes and Suffixes kmp
    cf 432D Prefixes and Suffixes kmp
    hdu Data Structure? 线段树
    关于position和anchorPoint之间的关系
    ios POST 信息
    CALayers的代码示例
    CALayers详解
    ios中得sqlite使用基础
  • 原文地址:https://www.cnblogs.com/robert-zhou/p/10651736.html
Copyright © 2011-2022 走看看