简单分页器: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 # 每页数目 }