首页 > 其他 > 详细

rest-framework之分页

时间:2019-07-07 15:11:44      阅读:100      评论:0      收藏:0      [点我收藏+]

常规分页

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是加密的。也不能指定哪一页。

 

rest-framework之分页

原文:https://www.cnblogs.com/zhengyuli/p/11146300.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!