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)
    
  • 相关阅读:
    变量对象,作用域链,闭包,匿名函数,this关键字,原型链,构造器,js预编译,对象模型,执行模型,prototype继承
    iptables-snat-dnat-设置
    salt-ssh
    linux-vsftp
    网站申请HTTPS 访问
    shell 处理文件脚本
    last与lastb命令 读取的日志文件
    Linux-server-sshd
    Nginx 日志切割
    修改或隐藏服务器名称需要修改源码
  • 原文地址:https://www.cnblogs.com/robert-zhou/p/10651736.html
Copyright © 2011-2022 走看看