1. 全局配置分页
# 1. REST framework提供了分页的支持。我们可以在配置文件中设置全局的分页方式,如:
REST_FRAMEWORK ={
        "DEFAULT_PAGINATION_CLASS":"rest_framework.pagination.PageNumberPagination"
        "PAGE_SIZE":10  # 每页数目
}
# views.py
class BookListView(ListAPIView):
    # 查询结果集
    queryset = Bookinfo.objects.all()
    # 序列化器
    serializer_class = BookSerializers
# 访问:
  http://127.0.0.1:8000/book/?page=2
2. 自定义分页类
# 1. 自定义分页类 (Mypaginations.py)
from collections import OrderedDict
from rest_framework.pagination import PageNumberPagination
from rest_framework.response import Response
class BookListPager(PageNumberPagination):
    page_size = 5  # 每页5条记录
    page_size_query_param = 'page_size'  # 每页记录数的参数名字
    # 自定义分页形式
    def get_paginated_response(self, data):
        return Response(OrderedDict([
            ('count', self.page.paginator.count),
            ('page_range', list(self.page.paginator.page_range)),  # 页码范围
            ('has_next', self.page.has_next()),             # 是否有下一页
            ('has_previous', self.page.has_previous()),    # 是否有上一页
            ('next_page_number', self.page.next_page_number()),  # 返回下一页页码
            # ('previous_page_number', self.page.previous_page_number()),  # 返回上一页页码
            ('result', data)
        ]))
# 2. urls.py
    path('book/', views.BookListView.as_view(), name="book"),
# 3. 试图函数引用
class BookListView(GenericAPIView):
    # 查询结果集
    queryset = Bookinfo.objects.all()
    # 序列化器
    serializer_class = BookSerializers
    # 分页类
    pagination_class = BookListPager
    def get(self, request, *args, **kwargs):
        queryset = self.filter_queryset(self.get_queryset())
        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)
        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)