14 DRF-分页
在查看数据列表的API中,如果数据量比较大,肯定不能把所有的数据都展示给用户,而需要通过分页展示。
在drf中为我们提供了一些分页先关类:
BasePagination,基类
PageNumberPagination(BasePagination) 支持 /accounts/?page=4&page_size=100 格式的分页(page当前页,page_size每页显示的数)适用于显示页面,上一页,下一页
LimitOffsetPagination(BasePagination) 支持 ?offset=100&limit=10 格式的分页(在数据库中,从100条开始往后取10条数据)
默认方式不常用,以下是自己构造的方式
?lastid=10&offset=0&limit=10 格式分页(找到id大于10,从0开始的后10条数据) --常用于 滚动翻页
1 PageNumberPagination
初步使用:
直接使用 PageNumberPagination 类

自定义分页类:
from rest_framework.pagination import PageNumberPagination
class MyPageNumberPagination(PageNumberPagination):
# page_size = 2 # 每页显示的数据(可在全局配置)
page_query_param = "p" # 配置page key值
page_size_query_param = "px" # 配置page_size key值
max_page_size = 10 # 每页显示数据最大值10
构造序列化返回数据(共有多少数据,上一页,下一页,序列化数据):

2 LimitOffsetPagination

LimitOffsetPagination 同样也可以创建子类,配置相应的值,同PageNumberPagination一样,唯一不一样的就是url中的参数。
如果单纯的使用 LimitOffsetPagination 没有问题,但是会出现一些小bug,比如数据重复取。
那么如何解决呢?再参数中多加两个参数,记录当前访问的数据的最大id和最小id

注意:limitOffset的形式一般会结合上一次的商品ID,查询小于此ID的商品,实现 滚动下来分析。
应用:
- 博客列表,使用LimitOffsetPagination
- 评论列表,使用PageNumberPagination

浙公网安备 33010602011771号