专栏首页Python 学习day95-分页组件
原创

day95-分页组件

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

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条数据和每页数据量做分页,实际配置即可

# 根据第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.根据游标分页,只有上一页和下一页

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

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

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

class PageBookView(APIView):
    def get(self, request):
        queryset = Book.objects.all()

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

        # 用分页器的方法进行分页
        page_data = page_obj.paginate_queryset(queryset, request)

        # 序列化好分页的数据
        ser_obj = BookSerializer(page_data, many=True)

        # 给响应添加上一页下一页链接
        return page_obj.get_paginated_response(ser_obj.data)

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

# 对全局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可以看到其实它已经帮助我们直接继承了所有的类。我们做的都是配置工作

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • day75-<项目>-obj.get_XX_display(),分页的实现

    少年包青菜
  • day114-Flask启动&Response内容&Request内容&模板语言

    少年包青菜
  • day130-day132requests+selenium&线程池&scrapy安装

    少年包青菜
  • drf分页器

    也可通过自定义Pagination类,来为视图添加不同分页行为。在视图中通过pagination_clas属性来指明。例如:

    山山仙人
  • 经典算法巡礼(七) -- 排序之堆排序

    很多时候,我们需要处理有序的元素,但不一定要求它们全部有序,或是不一定要一次就将它们排序。比如你可能启动了若干个定时器,那么下一次处理定时器事件只需要考虑距离现...

    jiezhu
  • Django-pure-pagination的使用

    Django自带有分页的两个类,但是用起来没有第三方这个分页模块方便,下面介绍一下django-pure-pagination使用方法。该库基于django.c...

    菲宇
  • 【Python 第35课】 continue

    break是彻底地跳出循环,而continue只是略过本次循环的余下内容,直接进入下一次循环。 在我们前面写的那个统计分数的程序里,如果发现有成绩不足60分,...

    Crossin先生
  • iOS内存管理-深入解析自动释放池

    iOS开发中的Autorelease机制是为了延时释放对象。自动释放的概念看上去很像ARC,但实际上这更类似于C语言中自动变量的特性。

    梧雨北辰
  • django-分页

    from django.core.paginator import Paginator

    小小咸鱼YwY
  • 手把手教你利用Python网络爬虫获取链家网的房产信息

    随着人们生活方式的的提高,房子成为了我们必不可少的一部分。而网上的信息太过于复杂,为了了解最近房价的变化趋势。小编以链家这个网站为例,抓取房价的信息。

    朱小五

扫码关注云+社区

领取腾讯云代金券