分页组件
分页组件的使用
有三种分页方式
需要新建一个py文件,以pagination.py为例
方式一:基本分页
第一步:导入分页类
from rest_framework.pagination import PageNumberPagination
第二步:书写分页类,继承 PageNumberPagination 并定义属性
class CommonPageNumberPagination(PageNumberPagination): page_size = 2 # 每页大小,一页显示多少条 page_query_param = 'page' # 分页查询条件 ?page=1 ?page =2 page_size_query_param = 'size' # 每页最多显示多少条的查询条 max_page_size = 5 # 每页最多显示多少条
第三步:书写视图类,配置分页类属性
# 导入自定义分页类 from .pagination import CommonPageNumberPagination class BookView(ViewSetMixin, ListAPIView): queryset = Book.objects.all() serializer_class = BookSerializer # 基本分页:http://127.0.0.1:8000/api/v1/books/?page=1&size=3 pagination_class = CommonPageNumberPagination # 不要放在列表中,分页方式只能选一种
第四步:前端访问
http://127.0.0.1:8000/api/v1/books/?page=2 # 查询第二页,显示2条 http://127.0.0.1:8000/api/v1/books/?page=2&size=3 # 查询第二页,显示3条,但是有最大限制,最多只显示5条
方式二:偏移分页
第一步:配置分页类
from rest_framework.pagination import LimitOffsetPagination class CommonLimitOffsetPagination(LimitOffsetPagination): default_limit = 2 # 每页显示条数 limit_query_param = 'limit' # 每页显示条数 的查询条数 ?limit=100 每页显示100条,如果不传,显示2条 offset_query_param = 'offset' # 偏移量 从第6条开始,拿30条 offset=6&limit=30 max_limit = 5 # limit可以写很大,但是最多显示5条
第二步:配置视图类
from .pagination import CommonLimitOffsetPagination class BookView(ViewSetMixin, ListAPIView): queryset = Book.objects.all() serializer_class = BookSerializer # 偏移分页 http://127.0.0.1:8000/api/v1/books/?limit=4&offset=2 从第2条开始,拿4条 pagination_class = CommonLimitOffsetPagination
第三步:前端访问
http://api.example.org/accounts/?limit=1 # 每页显示1条 http://api.example.org/accounts/?offset=4&limit=4 # 从第4条开始,每页显示4条
方式三:游标分页
第一步:配置分页类
from rest_framework.pagination import CursorPagination class CommonCursorPagination(CursorPagination): cursor_query_param = 'cursor' # 按游标查询的查询条件 ,value值,前端是不知道的,只能通过后台返回 page_size = 2 # 每页显示多少条 ordering = 'id' # 排序规则,必须是表中字段
第二步:配置视图类
from .pagination import CommonCursorPagination class BookView(ViewSetMixin, ListAPIView): queryset = Book.objects.all() serializer_class = BookSerializer # 游标分页--->不能再跟排序连用了--》用的不多,app会用 # 只能选择上一页和下一页,不能跳到某一页,但是速度快,针对于特别大数据量分页,有优势 pagination_class = CommonCursorPagination
第三步:前端访问
# 无法跳转到指定页数,显示内容都在后端配置 http://127.0.0.1:8000/api/v1/books/?cursor=cD0y