rest_framework 分页器组件 — 简单分页器(PageNumberPagination)
from rest_framework.pagination import PageNumberPagination
class Book(APIView):
def get(self,request):
book_lis = models.Book.objects.all()
page = PageNumberPagination() # 产生一个分页器对象
page.page_size = 6 # 每页显示的多少条记录
page.page_query_param = 'xx' # 前台查询第几页的参数,一般不需要改,系统默认查询参数为 page
# eg:http://127.0.0.1: 8122/book/?xx=5
page.page_size_query_param = 'max' # 前台控制每页显示的最大条数
# eg:http://127.0.0.1: 8122/book/?xx=5&max=7 表示显示第五页的记录,最大显示条数7条
page.max_page_size = 7 # 后台控制显示的最大记录条数,防止前台输入的查询条数过大
# eg:http://127.0.0.1: 8122/book/?xx=5&max=10000000000000
ret = page.paginate_queryset(book_lis, request) # 必须传两个参数,第一个queryset对象要分页的所有数量,第二个参数request
ser = BookSerializer(instance=ret, many=True)
return Response(ser.data)
rest_framework 分页器组件 — 偏移分页器(LimitOffsetPagination)
from rest_framework.pagination import LimitOffsetPagination
class Book(APIView):
def get(self, request):
book_lis = models.Book.objects.all()
page = LimitOffsetPagination() # 生成分页器对象
page.default_limit = 5 # 前台不传每页默认显示条数
page.limit_query_param = 'xx' # 前天控制每页的显示条数查询参数,一般不需要改,系统默认为 limit 变量
page.offset_query_param = 'offset' # 前天控制从哪一条开始显示的查询参数
# eg:http://127.0.0.1: 8122/book/?xx=5&offset=7 表示显示第8条开始,往下显示5条记录
page.max_limit = 10 # 后台控制显示的最大条数防止前台输入数据过大
ret = page.paginate_queryset(book_lis, request) # 必须传两个参数,第一个queryset对象要分页的所有数量,第二个参数request
ser = BookSerializer(instance=ret, many=True) # 在序列化就是分完页以后的数据
return Response(ser.data)
rest_framework 分页器组件 — 加密分页器(CursorPagination)
from rest_framework.pagination import CursorPagination
class Book(APIView):
def get(self, request):
book_list = models.Book.objects.all()
page_pagination = CursorPagination() # 产生一个分页器对象
page_pagination.ordering = 'id' # 通过字段来排序,默认升序
page_pagination.page_size = 3 # 每页显示的条数
ret = page_pagination.paginate_queryset(book_list, request, self)
book_ser = BookSerializer(instance=ret, many=True)
return page_pagination.get_paginated_response(book_ser.data) # 源码已经帮我们封装了响应回去的方法
# 源码封装响应回去的字典
# {
# "next": "http://127.0.0.1:8122/book/?cursor=cD04", # 表示下一页的加密请求路径
# "previous": "http://127.0.0.1:8122/book/?cursor=cj0xJnA9MTA%3D", # 表示上一页的加密请求路径
# "results": [
# {
# "id": 8,
# "name": "朝花夕拾"
# }
# ]
# }