一、简单分页
from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination
class PNPagination(PageNumberPagination):
# 定义一个PageNumberPagination的子类
# 如需改变参数,重写其属性即可
page_size = 1 # 每页显示数据数量
page_query_param = 'page' # 分页的url参数名
page_size_query_param = "size" # 可临时更改的每页显示数量
max_page_size = 5 # 可以用size临时改变每页显示数量,但是有每页最大显示数量的限制
class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
# 因为只需要一个分页器,因此不需要像解析器一样将类放在列表中
serializer_class = BookSerializers
def list(self,request,*args,**kwargs):
book_list=Book.objects.all()
# 生成分页器对象
pp=LimitOffsetPagination()
# 调用paginate_queryset()方法来得到每页显示的数据
pager_books=pp.paginate_queryset(queryset=book_list,request=request,view=self)
print(pager_books)
# 将新的数据序列化
bs=BookSerializers(pager_books,many=True)
#return Response(bs.data)
return pp.get_paginated_response(bs.data)
二、全局配置分页
REST_FRAMEWORK = {
.....
"PAGE_SIZE":1
}
三、偏移分页
from rest_framework.pagination import LimitOffsetPagination
class MyLimitPagition(LimitOffsetPagination):
“““
在地址栏中的url后面是
limit=1限制显示数据1条
offset=1表示往后偏移一个,显示的将是第二条数据,默认是0
limit=2&offset=1 表示限制显示两条数据,偏移一位,意味着将限制第二条和第三条数据
”””
default_limit = 1
class BookView(APIView):
def get(self, request):
php = LimitOffsetPagination()
book_qs = Book.objects.all()
qs = php.paginate_queryset(queryset=book_qs, request=request, view=self)
bs = dataApi.BookSerializers(qs, many=True)
return Response(bs.data)