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)