1.PageNumberPagination
1.1 概述
PageNumberPagination适用于显示页面、上一页、下一页,url示例:/accounts/?page=7&page_size=2
1.2 应用示例代码
1.2.1 settings
REST_FRAMEWORK = {
"UNAUTHENTICATED_USER": None,
"PAGE_SIZE": 2 # 配置分页后每页的数据数量
}
1.2.2 视图view
class BlogView(APIView):
def get(self, request, *args, **kwargs):
""" 博客列表 """
# 1.读取数据库中的博客信息
queryset = models.Blog.objects.all().order_by("id")
# 2.分页处理得到分页后的->queryset
from rest_framework.pagination import PageNumberPagination
pager = PageNumberPagination()
result = pager.paginate_queryset(queryset, request, self) # 源码
# 3.序列化
ser = BlogSerializers(instance=result, many=True)
# 4.获取序列化结果 or 分页返回处理
response = pager.get_paginated_response(ser.data) # 源码
return response
2.LimitOffsetPagination
2.1 概述
LimitOffsetPagination适用于滚动翻页,url示例:/accounts/?offset=10&limit=10- 注意:limitOffset的形式一般会结合上一次的商品ID,查询小于此ID的商品,实现 滚动下来分析。
2.2 应用示例代码
class BlogView(APIView):
def get(self, request, *args, **kwargs):
""" 博客列表 """
# 1.读取数据库中的博客信息
queryset = models.Blog.objects.all().order_by("-id")
# ?max_id=1
# ?min_id=13
max_id = request.query_params.get("max_id")
if max_id:
queryset = queryset.filter(id__lt=max_id)
# 2.分页处理得到分页后的->queryset
from rest_framework.pagination import LimitOffsetPagination
pager = LimitOffsetPagination()
result = pager.paginate_queryset(queryset, request, self)
# 3.序列化
ser = BlogSerializers(instance=result, many=True)
# 4.获取序列化结果 or 分页返回处理
response = pager.get_paginated_response(ser.data)
return response