rest_framework 分页器组件,简单分页器(PageNumberPagination),偏移分页器(LimitOffsetPagination),加密分页器(CursorPagination)
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": "朝花夕拾" # } # ] # }