前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >day95-分页组件

day95-分页组件

原创
作者头像
少年包青菜
修改2020-11-05 10:53:11
5420
修改2020-11-05 10:53:11
举报
文章被收录于专栏:Python 学习Python 学习

1.根据页码和每一页多少条数据做分页,实际配置即可

代码语言:javascript
复制
from rest_framework import pagination


# 根据页码和每一页多少条数据做分页
class MyPagination(pagination.PageNumberPagination):
    """
    http://127.0.0.1:8000/api/page?page=2&size=3
    从第2页开始显示,每一页显示3条数据
    """
    # 一页显示两条数据
    page_size = 2
    
    # url 拼接查询关键字,page=n,从第n页开始
    page_query_param = 'page'
    
    # url 拼接查询关键字,size=m,每页显示m条数据,不超过 max_page_size
    page_size_query_param = 'size'
    
    # 每一页给你限定死最多三条数据,即使请求每一超过3条也只显示3条
    max_page_size = 3

1.1进入到PageNumberPagination里面查看可配置其他

2.根据第n条数据和每页数据量做分页,实际配置即可

代码语言:javascript
复制
# 根据第n条数据和每页数据量做分页
class LimitOffsetPaginator(pagination.LimitOffsetPagination):
    """
    http://127.0.0.1:8000/api/page?offset=2&limit=4
    从第3条数据开始显示,每一页显示4条数据
    """
    # 每一页默认显示 1 条数据
    default_limit = 1
    # url 拼接查询关键字,limit=n,每一页显示多少条
    limit_query_param = 'limit'
    # url 拼接查询关键字,offset=m,从第m+1条数据开始显示
    offset_query_param = 'offset'

2.1进入到LimitOffsetPagination里面查看可配置其他

3.根据游标分页,只有上一页和下一页

代码语言:javascript
复制
# 根据游标分页,只有上一页和下一页
class CursorPaginator(pagination.CursorPagination):
    cursor_query_param = 'cursor'
    # 根据 id 做游标
    ordering = 'id'
    # 每一页显示 2 条数据
    page_size = 2

3.1进入到CursorPagination里面查看可配置其他

4.在视图中使用分页器,先要导入自己写的分页器

代码语言:javascript
复制
class PageBookView(APIView):
    def get(self, request):
        queryset = Book.objects.all()

        # 实例化这个分页类
        page_obj = pagination.MyPagination()
        # page_obj = pagination.LimitOffsetPaginator()
        # page_obj = pagination.CursorPaginator()

        # 每一页的 queryset,模型
        page_queryset = page_obj.paginate_queryset(queryset, request)

        # 每一页的分页模型序列化好数据
        ser_obj = BookSerializer(page_queryset, many=True)

        # 该方法封装了一些上一页下一页的链接
        return page_obj.get_paginated_response(ser_obj.data)

5.在三层封装视图里面也可以直接使用和配置

代码语言:javascript
复制
# 对全局APIView进行第三次封装
class BookModelView(viewsets.ModelViewSet):
    # 同样配置 queryset 和 serializer_class
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    pagination_class = pagination.MyPagination
    # pagination_class = pagination.LimitOffsetPaginator
    # pagination_class = pagination.CursorPaginator

5.1注意直接使用的是 DRF 直接提供继承的 viewsets.ModelViewSet,不是 day93自己写的

5.2进入viewsets.ModelViewSet可以看到其实它已经帮助我们直接继承了所有的类。我们做的都是配置工作

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.根据页码和每一页多少条数据做分页,实际配置即可
    • 1.1进入到PageNumberPagination里面查看可配置其他
    • 2.根据第n条数据和每页数据量做分页,实际配置即可
      • 2.1进入到LimitOffsetPagination里面查看可配置其他
      • 3.根据游标分页,只有上一页和下一页
        • 3.1进入到CursorPagination里面查看可配置其他
        • 4.在视图中使用分页器,先要导入自己写的分页器
        • 5.在三层封装视图里面也可以直接使用和配置
          • 5.1注意直接使用的是 DRF 直接提供继承的 viewsets.ModelViewSet,不是 day93自己写的
            • 5.2进入viewsets.ModelViewSet可以看到其实它已经帮助我们直接继承了所有的类。我们做的都是配置工作
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档