DRF之分页
作者:互联网
分页概述
5个接口中,只有查询所以,涉及到分页。
pc端是下一页,下一页的形式;如果在app、小程序中展示的形式是下拉加载下一个的形式
分页默认提供了三种方式:PageNumberPagination、LimitOffsetPagination、CursorPagination
导入
from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination
PageNumberPagination
基本分页,按照页码数,每页显示多少条
第一步:
写一个类,继承PageNumberPagination,重写四个类属性
class CommonPageNumberPagination(PageNumberPagination): page_size = 3 # 每页显示条数,默认 page_query_param = 'page' # 查询条件叫page --> ?page=3 page_size_query_param = 'size' 每页显示的条数的查询条件 ?page=3&size=9 查询第三页,第三页显示9条 max_page_size = 5 # 每页最大线上多少条,?page=3&size=9,最终还是显示5条
第二步:配置在视图类上,必须继承GenericAPIView才有
from .page import CommonPageNumberPagination as PageNumberPagination from rest_framework.filters import OrderingFilter from rest_framework.filters import SearchFilter class BookView(GenericViewSet, ListModelMixin): queryset = Book.objects.all() serializer_class = BookSerizlizer filter_backends = [SearchFilter, OrderingFilter] ordering_fields = ['price', 'id'] search_fields = ['name', 'author'] # 不要放在列表中,分页只能按照一种方式,不能按照多种方式,必须继承GenericViewSet才能使用 pagination_class = PageNumberPagination
第三步:查询方式
http://127.0.0.1:8000/books/?page=2&size=8
LimitOffsetPagination
偏移分页
第一步:写一个类,继承LimitOffsetPagination,重写四个类属性
class CommonLimitOffsetPagination(LimitOffsetPagination): default_limit = 2 # 默认一页获取条数 2 条 limit_query_param = 'limit' # ?limit=3 获取三条,如果不传,就用上面的默认两条 offset_query_param = 'offset' ?limit=3&offset=2 从第2条开始,获取3条 ?offset=3:从第三条开始,获取2条 max_limit = 5 # 最大显示条数 5 条
第二步:配置在视图类上,必须继承GenericAPIView才有
pagination_class = LimitOffsetPagination
第三步:查看方式
http://127.0.0.1:8000/books/?limit=2&offset=1
CursorPagination
游标分页
第一步:写一个类,继承CursorPagination,重写三个类属性
class CommonCursorPagination(CursorPagination): page_size = 2 # 每页显示2条 cursor_query_param = 'cursor' # 查询条件 ?cursor=sdafdase ordering = 'id' # 排序规则,使用id排序
第二步:配置在视图类上,必须继承GenericAPIView才有
pagination_class = CommonCursorPagination
第三步:查询方式
http://127.0.0.1:8000/books/?cursor=cD02
第三种方式和上面两种的区别
上面两种,可以从中间位置获取某一页,Cursor方式只能上一页和下一页
上面这两种在获取某一页的时候,都需要从开始过滤到要取的页面数的数据
下面这种方式,先排序,内部维护了一个游标,游标只能选择往前走或往后走,在取某一页的时候,不需要过滤之前的数据
特点及应用场景
这种分页方式特殊,只能选择上一页和下一页,不能指定某一页,但是速度快,适合大数据量的分页
大数据量和app分页---》下拉加载下一页,不需要指定跳转到第几页
标签:分页,page,一页,PageNumberPagination,DRF,class,size 来源: https://www.cnblogs.com/zhaoyuanshi/p/16121253.html