分页组件

发布时间 2023-12-28 16:40:08作者: wellplayed

分页组件的使用

有三种分页方式

需要新建一个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