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)