DRF分页接口
PageNumberPagination(基本分页类)
- 特点
- 基于页码的分页方式,适用于固定大小的数据集
- 使用页码和每页显示数量来进行分页
- 传统的分页方式,用户可以通过页码进行导航
LimitOffsetPagination(偏移分类)
- 特点
- 基于偏移和限制的分页方式,常用于小型数据集
- 使用
limit
和offset
参数进行分页控制 - 需要提供数据总量,可以直接跳转到指定位置
CursorPagination(游标分页)
- 特点
- 基于数据库游标的分页,适用于大型数据集,性能更高
- 使用数据库中的游标位置来确定下一页和上一页的数据
- 不需要知道总数据量,适用于动态数据或实时更新的数据
实战
使用方式:
- 自定义类,继承某个分页类
- 在视图类中配置:必须继承
GenericAPIView
分页类
- CursorPagination:基本分页类
- LimitOffsetPagination:偏移分类
- PageNumberPagination:游标分页
# MyPagination.py
from rest_framework.pagination import CursorPagination, LimitOffsetPagination, PageNumberPagination
# 1.基本分页
class CommonPageNumberPagination(PageNumberPagination):
# 定制类属性
page_size = 2 # 每页显示2条
page_query_param = 'page' # http://127.0.0.1:8008/publish/?page=2 当前页数
page_size_query_param = 'size' # http://127.0.0.1:8008/publish/?page=2&size=3 每页显示条数
max_page_size = 10 # 每页最多显示10条
# http://127.0.0.1:8008/publish/?page=2 查询第二页,每页显示2条
# http://127.0.0.1:8008/publish/?page=1&size=5查询第一页,每页显示5
# 2.limit offset分页方式 偏移分页
class CommonLimitOffsetPagination(LimitOffsetPagination):
default_limit = 2 # 每页显示两条
# http://127.0.0.1:8008/publish/?limit=4 一页显示四条
limit_query_param = 'limit' # 控制每页显示多少条
# http://127.0.0.1:8008/publish/?offset=3 从第3条开始,取两条
# http://127.0.0.1:8008/publish/?offset=3&limit=1 从第3条开始,取1条
offset_query_param = 'offset' # 偏移量
max_limit = 10 # 最大每页取10条
# 3.游标分页,必须要排序,且只能取上一页和下一页不能直接跳转
# 效率高,大数据量和app端推荐使用
class CommonCursorPagination(CursorPagination):
cursor_query_param = 'cursor' # 查询条件 http://127.0.0.1:8008/publish/?cursor=asfasf
page_size = 2
ordering = 'id'
使用
# views.py
class publish(GenericViewSet, ListModelMixin,CreateModelMixin):
queryset = models.Publish.objects.all()
serializer_class = PublishSerializer
# pagination_class = CommonPageNumberPagination # 分页方式只能选择一种
# pagination_class = CommonLimitOffsetPagination # 分页方式只能选择一种
pagination_class = CommonCursorPagination # 分页方式只能选择一种