分页组件

分页组件

​ 查询所有,才有分页功能(例如网站的下一页功能,app下挂加载更多)

PageNumberPagination基本分页#

重要类属性#

  • page_size = api_settings.PAGE_SIZE (每页显示条数)
  • page_query_param = 'page' (查询时用的参数)
  • page_size_query_param = None (更改返回条数)
  • max_page_size = None (每页最大显示条数)

基本定义#

# 1 导入 PageNumberPagination 类
from rest_framework.pagination import PageNumberPagination


# 2 写一个类继承PageNumberPagination类

class CommonPageNumberPagination(PageNumberPagination):
    page_size = 2 # 每页正常显示2条
    page_query_param = 'page' # 查询页数时用的参数
    page_size_query_param = 'size' # 更改每页显示的条数
    max_page_size = 5 # 每页最多显示的条数 即使 size = 99999 也最多是5条

简单使用#

class NormalBookView(GenericViewSet, RetrieveModelMixin, ListModelMixin):
    serializer_class = BookSerializer
    queryset = Book.objects.all()
    # 要注意 在设置分页器的时候不是一个列表!!!
    pagination_class = CommonPageNumberPagination

LimitOffsetPagination偏移分页#

​ 偏移的意思就是--->偏移到第几条 就从第几条数据开始查

重要的类属性#

  • default_limit = api_settings.PAGE_SIZE (每页显示条数)
  • limit_query_param = 'limit' (查询时用的参数)
  • offset_query_param = 'offset' (offset偏移的查询参数)
  • max_limit = None (每页最大显示条数)

基本定义#

class CommonLimitOffsetPagination(LimitOffsetPagination):
    default_limit = 3  # 每页显示的条数
    limit_query_param = 'limit'  # 查询时使用的参数
    offset_query_param = 'offset'  # 偏移的参数
    max_limit = '5'  # 每页最大的显示条数

简单使用#

class NormalBookView(GenericViewSet, RetrieveModelMixin, ListModelMixin):
    serializer_class = BookSerializer
    queryset = Book.objects.all()
    # 要注意 在设置分页器的时候不是一个列表!!!
    pagination_class = CommonLimitOffsetPagination

CursorPagination游标分页#

重要的类属性#

  • cursor_query_param = 'cursor' (查询条件)
  • page_size = api_settings.PAGE_SIZE (每页显示条数)
  • ordering = '-created' (排序)
  • page_size_query_param = None (更改每页显示条数)
  • max_page_size = None (每页最大显示条数)

使用#

# 1 写一个类,继承LimitOffsetPagination,重写4个类属性

class CommonCursorPagination(CursorPagination):
    cursor_query_param = 'cursor'
    page_size = 2
    ordering = '-id'
    page_size_query_param = 'offset'
    max_page_size = 5
    
# 2 在视图类中配置写好的分页类

class BookAPIView(ViewSetMixin, ListAPIView):
    queryset = models.Books.objects.all()
    serializer_class = BookModelSerializer
    pagination_class = CommonCursorPagination

优缺点#

# 优点:速度最快,数据量越大,越有优势(没有那么大的数据量,用的不多)

# 缺点:只能前一页和后一页,不能直接跳到某一页

作者:Esofar

出处:https://www.cnblogs.com/Hqqqq/p/18149603

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   HuangQiaoqi  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示