• rest-framework之分页


    常规分页

    from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination
    class PublishView(APIView):
        versioning_class =URLPathVersioning
        parser_classes =[JSONParser,]
        def get(self,request,*args,**kwargs):
            #批量添加
            # l1 = []
            # for i in range(100):
            #     l1.append(models.Publish(name='%s出版社'%i,city='%s城市'%i))
            # models.Publish.objects.bulk_create(l1)
            #分页的第一种方式
            #查询出所有数据
            ret = models.Publish.objects.all()
            #实例化产生一个普通分页对象
            page = PageNumberPagination()
            #手动配置每一页显示个数
            page.page_size=5
            #手动配置路径上查询页的key的名称
            page.page_query_param = 'zyl'
            #下面两个是成对的必去一起写
            #手动配饰路径上显示最多信息条数的key,比如size=10,如果改成zyl就是zyl=10
            page.page_size_query_param = 'size'
            #限制每一页最多显示的页数,如果size=100,每一页显示的还是10条
            page.max_page_size = 10
            #ret是分页的所有数据,有个返回结果就是分页之后的数据,是个列表
            ret_page = page.paginate_queryset(ret,request,self)
            #序列化
            pub_ser = PublishSerializers(ret_page,many=True)
            #去settings里面配置每一页显示多少条
            #  'PAGE_SIZE':2       #每页显示两条信息
            return Response(pub_ser.data)

    settings.py

    REST_FRAMEWORK = {
        # 每页显示两条
        'PAGE_SIZE':2
    }

    偏移分页

        def get(self,request,*args,**kwargs):
            #分页的第二种方式
            #查询出所有数据
            ret = models.Publish.objects.all()
            #实例化产生一个普通分页对象
            page = LimitOffsetPagination()
            #这里参数就不一样了
            #从标杆位置往后取几个,默认取三个,也可以指定
            page.default_limit = 3
            #每次取的条数,可以自定义key值
            page.limit_query_param = 'limit'
            #标杆值,offset=6 就是在第六个位置往后拿三条
            page.offset_query_param = 'offset'
            #对大取10条
            page.max_limit = 10
            #ret是分页的所有数据,有个返回结果就是分页之后的数据,是个列表
            ret_page = page.paginate_queryset(ret,request,self)
            #序列化
            pub_ser = PublishSerializers(ret_page,many=True)
            #去settings里面配置每一页显示多少条
            #  'PAGE_SIZE':2       #每页显示两条信息
            return page.get_paginated_response(pub_ser.data)
            # return Response(pub_ser.data)

    这里会把总条数,上一页的地址,写一页的地址返回给你

    游标分页

        def get(self,request,*args,**kwargs):
            #分页的第三种方式
            #查询出所有数据
            ret = models.Publish.objects.all()
            #实例化产生一个普通分页对象
            page = CursorPagination()
            #每一个显示的条数
            page.page_size = 3
    
            page.cursor_query_param = 'cursor'
            #按什么排序
            page.ordering='id'
            #ret是分页的所有数据,有个返回结果就是分页之后的数据,是个列表
            ret_page = page.paginate_queryset(ret,request,self)
            #序列化
            pub_ser = PublishSerializers(ret_page,many=True)
            #去settings里面配置每一页显示多少条
            #  'PAGE_SIZE':2       #每页显示两条信息
            return page.get_paginated_response(pub_ser.data)
            # return Response(pub_ser.data)

    这里我们就不知道填什么了所以就要用到

    这里测cursor是加密的。也不能指定哪一页。

  • 相关阅读:
    yii2框架随笔27
    yii2框架随笔26
    yii2框架随笔25
    yii2框架随笔24
    yii2框架随笔23
    yii2框架随笔21
    yii2框架随笔20
    yii2框架随笔19
    yii2源码学习笔记(十五)
    yii2源码学习笔记(十四)
  • 原文地址:https://www.cnblogs.com/zhengyuli/p/11146300.html
Copyright © 2020-2023  润新知