from rest_framework import pagination
# 根据页码和每一页多少条数据做分页
class MyPagination(pagination.PageNumberPagination):
"""
http://127.0.0.1:8000/api/page?page=2&size=3
从第2页开始显示,每一页显示3条数据
"""
# 一页显示两条数据
page_size = 2
# url 拼接查询关键字,page=n,从第n页开始
page_query_param = 'page'
# url 拼接查询关键字,size=m,每页显示m条数据,不超过 max_page_size
page_size_query_param = 'size'
# 每一页给你限定死最多三条数据,即使请求每一超过3条也只显示3条
max_page_size = 3
# 根据第n条数据和每页数据量做分页
class LimitOffsetPaginator(pagination.LimitOffsetPagination):
"""
http://127.0.0.1:8000/api/page?offset=2&limit=4
从第3条数据开始显示,每一页显示4条数据
"""
# 每一页默认显示 1 条数据
default_limit = 1
# url 拼接查询关键字,limit=n,每一页显示多少条
limit_query_param = 'limit'
# url 拼接查询关键字,offset=m,从第m+1条数据开始显示
offset_query_param = 'offset'
# 根据游标分页,只有上一页和下一页
class CursorPaginator(pagination.CursorPagination):
cursor_query_param = 'cursor'
# 根据 id 做游标
ordering = 'id'
# 每一页显示 2 条数据
page_size = 2
class PageBookView(APIView):
def get(self, request):
queryset = Book.objects.all()
# 实例化这个分页类
page_obj = pagination.MyPagination()
# page_obj = pagination.LimitOffsetPaginator()
# page_obj = pagination.CursorPaginator()
# 每一页的 queryset,模型
page_queryset = page_obj.paginate_queryset(queryset, request)
# 每一页的分页模型序列化好数据
ser_obj = BookSerializer(page_queryset, many=True)
# 该方法封装了一些上一页下一页的链接
return page_obj.get_paginated_response(ser_obj.data)
# 对全局APIView进行第三次封装
class BookModelView(viewsets.ModelViewSet):
# 同样配置 queryset 和 serializer_class
queryset = Book.objects.all()
serializer_class = BookSerializer
pagination_class = pagination.MyPagination
# pagination_class = pagination.LimitOffsetPaginator
# pagination_class = pagination.CursorPaginator
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有