码迷,mamicode.com
首页 > 其他好文 > 详细

drf分页器

时间:2019-04-03 22:33:40      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:多少   lis   速度   value   elf   方法   产生   属性   参数   

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 django_redis import get_redis_connection


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):
        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 = 10
        page_list = page.paginate_queryset(obj_li,request,self)
        return JsonResponse(page_list,safe=False)

drf分页器

标签:多少   lis   速度   value   elf   方法   产生   属性   参数   

原文地址:https://www.cnblogs.com/robert-zhou/p/10651736.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!