简单分页器:PageNumberPagination
from rest_framework.pagination import PageNumberPagination
class SimplePage(PageNumberPagination):
# #每页显示记录数,前端没有传入page_num,则默认显示此参数
page_size = 3
#url链接参数,如;http://127.0.0.1:8000/api/books/?page=3
page_query_param = 'page'
#前端传入每页显示条数
page_size_query_param = 'size'
# 后端控制每页显示最大记录数
max_page_size = 5
偏移分页器:LimitOffsetPagination
from rest_framework.pagination import LimitOffsetPagination
class LimitPage(LimitOffsetPagination):
default_limit = 3 # 每页条数
limit_query_param = 'limit' # 往后拿几条
offset_query_param = 'offset' # 标杆
max_limit = 5 # 后台控制显示的最大条数防止前台输入数据过大
# http://127.0.0.1:8000/api/books/?limit=5&offset=3 表示显示第4条开始,往下显示5条记录
加密分页器:CursorPagination
from rest_framework.pagination import CursorPagination
class CursorPage(CursorPagination):
#每页显示条数
page_size = 3
#页数关键词
cursor_query_param = 'page'
#后台允许显示的最大条数
max_page_size = 5
#安装id号降序排序
ordering = '-id'
#http://127.0.0.1:8000/api/books/?page=cD02
结果实例
使用方法:
#继承APIview的视图类中使用
class BookView(APIView):
def get(self,request,*args,**kwargs):
books = models.Book.objects.all().filter(is_delete=False)
# 简单分页
# page=SimplePage()
# 偏移分页器
# page=LimitPage()
# 加密分页器
page = CursorPage()
page_list = page.paginate_queryset(books, request, view=self) #获取分页内容
# 下一页
next_page = page.get_next_link()
# 上一页
per_page = page.get_previous_link()
#对分页的内容进行序列化
books_ser = ser.BookModelser(instance=page_list, many=True)
# books_ser=ser.BookModelser(books,many=True)
# 用分页器封装的响应
return page.get_paginated_response(books_ser.data)
#继承视图子类的视图中使用
pagination_class=分页类(我们自己重写的,可以修改字段)
全局配置
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 100 # 每页数目
}