Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >drf分页器

drf分页器

作者头像
仙人技术
发布于 2020-07-14 02:13:32
发布于 2020-07-14 02:13:32
84610
代码可运行
举报
运行总次数:0
代码可运行

Author:Laoqi

  • 1.1 PageNumberPagination
  • 1.2 LimitOffsetPagination
  • 1.3 CursorPagination

Django REST framework提供了分页的支持。

可以在配置文件中设置全局的分页方式,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS':  'rest_framework.pagination.PageNumberPagination', # 选用的分页器
    'PAGE_SIZE': 100  # 每页数目
}

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from rest_framework.pagination import PageNumberPagination

class MyPageNumberPagination(PageNumberPagination):
    # 设置url中的取多少页的key
    page_query_param = 'page'
    # 设置url中设置取数据条数的key
    page_size_query_param = 'size'
    #设置每一页的数据条数
    page_size = 2
    # 设置每一页最多可取的数据数
    max_page_size = 5
   
class Book2View(ListAPIView):
    queryset = models.Book.objects.all()
    serializer_class = BookModelSerializer
    pagination_class = MyPageNumberPagination #指定该视图类的分页器

注意:如果在视图内关闭分页功能,只需在视图内设置pagination_class = None 即可,即在设置了全局分页之后我们可以在局部禁用该设置。

drf 提供给我们的分页器有PageNumberPagination、LimitOffsetPagination、CursorPagination。

1.1 PageNumberPagination

url形式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1:8000/books/?page=1

可以在自定义类中定义的属性有:

  • page_query_param :设置url中页数的关键字,默认的是page。
  • page_size_query_param :设置url中每页数据条数的关键字,默认的是None。
  • page_size :设置每一页的数据条数。(必设)
  • max_page_size : 设置每一页最多可取的数据条数。(可选)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class MyPageNumberPagination(PageNumberPagination):
    page_size = 2
    page_query_param = 'page'
    page_size_query_param = 'size'
    max_page_size = 5
    
class Book2View(ListAPIView):
    queryset = models.Book.objects.all()
    serializer_class = BookModelSerializer
    pagination_class = MyPageNumberPagination
   
# APIView 中使用自定义分页类进行分页操作
class  Pager(APIView):
    def get(self,request,*args,**kwargs):
        # 获取所有数据
        ret=models.Book.objects.all()
        # 创建分页对象
        page=MyPageNumberPagination()
        # 在数据库中获取分页的数据
        page_list=page.paginate_queryset(ret,request,view=self)
        # 对分页进行序列化
        ser=BookSerializer1(instance=page_list,many=True)
        # return Response(ser.data)
        # 这个也是返回Response对象,但是比基本的多了上一页,下一页,和总数据条数(了解)
        return page.get_paginated_response(ser.data)

1.2 LimitOffsetPagination

url形式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/four/books/?limit=100&offset=400

可以在自定义类中定义的属性有:

  • default_limit :默认限制,默认值与PAGE_SIZE设置一致。
  • limit_query_param : limit参数名,默认为limit。
  • offset_query_param : offset参数名,默认offset。
  • max_limit : 最大limit限制,默认None。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class MyLimitOffsetPagination(LimitOffsetPagination):
    default_limit = 3
    limit_query_param = 'limit'
    max_limit = None
    offset_query_param = 'offset'
    
class Book2View(ListAPIView):
    queryset = models.Book.objects.all()
    serializer_class = BookModelSerializer
    pagination_class = MyLimitOffsetPagination
    
# APIView 中使用自定义分页类进行分页操作
class  Pager(APIView):
    def get(self,request,*args,**kwargs):
        # 获取所有数据
        ret=models.Book.objects.all()
        # 创建分页对象
        page=LimitOffsetPagination()
        # 在数据库中获取分页的数据
        page_list=page.paginate_queryset(ret,request,view=self)
        # 对分页进行序列化
        ser=BookSerializer1(instance=page_list,many=True)
        # return page.get_paginated_response(ser.data)
        return Response(ser.data)

1.3 CursorPagination

url形式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/four/books/?cursor=cD0xNQ%3D%3D

可以在自定义类中定义的属性有:

  • cursor_query_param:默认查询字段,不需要修改。
  • page_size:每页数目。
  • ordering:按什么排序,需要指定。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class MyCursorPagination(CursorPagination):
    cursor_query_param = 'cursor'
    page_size = 2
    ordering = '-id'

class Book2View(ListAPIView):
    queryset = models.Book.objects.all()
    serializer_class = BookModelSerializer
    pagination_class = MyCursorPagination
    
# APIView 中使用自定义分页类进行分页操作
class  Pager(APIView):
    def get(self,request,*args,**kwargs):
        # 获取所有数据
        ret=models.Book.objects.all()
        # 创建分页对象
        page=CursorPagination()
        page.ordering='nid'
        # 在数据库中获取分页的数据
        page_list=page.paginate_queryset(ret,request,view=self)
        # 对分页进行序列化
        ser=BookSerializer1(instance=page_list,many=True)
        # 可以避免页码被猜到
        return page.get_paginated_response(ser.data)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
day95-分页组件
1.根据页码和每一页多少条数据做分页,实际配置即可 from rest_framework import pagination # 根据页码和每一页多少条数据做分页 class MyPaginat
少年包青菜
2020/03/11
5820
django rest_framework 分页
本文主要介绍在drf框架中如何对查询的数据进行分页,在drf框架中有提供该基础功能的使用案例和文档,详情参考drf-pagination-官网文档 (opens new window)
编程黑洞
2023/03/30
6680
Django REST Framework-分页(一)
在 Web 应用程序中,当我们从数据库中检索大量数据时,为了避免一次性返回所有数据,通常需要将数据分成多个页面。这就是分页的基本概念:将数据分成多个页面,每个页面包含一定数量的数据。
玖叁叁
2023/04/25
3270
Django rest framework(7)----分页
第一种分页  PageNumberPagination 基本使用 (1)urls.py urlpatterns = [ re_path('(?P<version>[v1|v2]+)/page1
zhang_derek
2018/04/11
1.8K0
Django rest framework(7)----分页
【愚公系列】2022年04月 Python教学课程 76-DRF框架之分页
REST 框架包括对可自定义分页样式的支持。这允许您修改将大型结果集拆分为各个数据页的方式。
愚公搬代码
2022/04/21
1.1K0
【愚公系列】2022年04月 Python教学课程 76-DRF框架之分页
DRF分页
REST framework提供了分页的支持,并允许在settings.py中进行全局配置,如下所示:
zy010101
2021/12/17
4900
DRF分页
Django Rest Framework(分页、视图、路由、渲染器)
1、基于limit offset 做分页(如:在url后面加上?offset=0&limit=2,即代表从第0条开始,往后取2条(即1,2))
用户1214487
2022/03/26
1.3K0
Django Rest Framework(分页、视图、路由、渲染器)
Django REST Framework-分页(二)
在这个例子中,我们创建了一个名为 BookPagination 的分页器类,并设置了默认的每页返回的对象数量为 10。我们还为客户端指定了可以在查询参数中使用的 limit 和 offset 参数,并设置了最大页面大小为 100。最后,我们将 BookPagination 分页器类添加到 BookViewSet 视图集合中。
玖叁叁
2023/04/25
2960
Django REST Framework-如何使用分页
在 Web 开发中,处理大量数据是非常常见的。但是,如果一次性返回所有数据,不仅会增加服务器的负担,而且还会影响客户端的响应时间。为了解决这个问题,分页被广泛应用于 Web 应用程序中,特别是在 RESTful API 中。
玖叁叁
2023/04/25
2.1K1
DjangoRestFramework,认证组件、权限组件、频率组件、url注册器、响应器、分页组件
    我们知道,我们不管路由怎么写的,对应的视图类怎么写的,都会走到dispatch方法,进行分发,
changxin7
2019/12/20
6250
DjangoRestFramework,认证组件、权限组件、频率组件、url注册器、响应器、分页组件
Vue+Django2.0 restframework打造前后端分离的生鲜电商项目(3)
1.drf前期准备 1.django-rest-framework官方文档 https://www.django-rest-framework.org/ #直接百度找到的djangorestframe
玩蛇的胖纸
2018/10/10
1.4K0
Vue+Django2.0 restframework打造前后端分离的生鲜电商项目(3)
django pagination 自定义分页
pagination #0 GitHub https://github.com/Coxhuang/django-Pagination #1 环境 Python3.6 Django==2.0.7 djangorestframework==3.8.2 #2 需求分析 查看某个列表式,需要分页展示 自定义分页输出的格式 自定义分页的参数 #3 开始 #3.1 新建一个Django项目 #3.2 新建文件 pagination.py(文件名随意) from rest_framework.pagination im
Autooooooo
2020/11/09
7790
Django+Vue开发生鲜电商平台之5.使用DRF实现商品列表页和过滤
Github和Gitee代码同步更新: https://github.com/PythonWebProject/Django_Fresh_Ecommerce; https://gitee.com/Python_Web_Project/Django_Fresh_Ecommerce。
cutercorley
2020/07/27
5.5K0
Django+Vue开发生鲜电商平台之5.使用DRF实现商品列表页和过滤
python测试开发django-rest-framework-87.分页查询
django-rest-framework 分页器提供了3中分页方式,前面一篇介绍了简单分页 (PageNumberPagination), 本篇继续介绍另外2个分页偏移分页 (LimitOffsetPagination) 和游标分页 (CursorPagination)
上海-悠悠
2021/02/03
5810
rest_framework之解析器、路由控制、分页
解析器 我们都知道,网络传输数据只能传输字符串格式的,如果是列表、字典等数据类型,需要转换之后才能使用 但是我们之前的rest_framework例子都没有转换就直接可以使用了,这是因为rest_framework有一套解析器, 默认他会帮我们转换3种类型的数据,分别是,JSONParser,FormParser,MultiPartParser 而如果我们需要转换其他数据,需要在视图类里配置parser_classes参数,如下: from rest_framework.parsers import JSO
人生不如戏
2018/05/30
4820
python测试开发django-rest-framework-86.分页查询功能(PageNumberPagination)
当查询出来的数据量非常大的时候,需要分页查询,django-rest-framework 提供了分页的支持。 有三种分页功能:PageNumberPagination,LimitOffsetPagination,CursorPagination。
上海-悠悠
2021/02/03
1.2K0
Python进阶43-drf框架(五)
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
3.2K0
Python进阶43-drf框架(五)
从入门到"精通"Django REST Framework-(五)
GenericAPIView 是 Django REST Framework (DRF) 中的一个基础视图类,它继承自 APIView,并添加了一些常用的功能,特别是与数据库模型交互的功能。它是 DRF 中通用视图和视图集的基础,提供了查询、序列化、分页等常用操作的标准实现。本质上它是 DRF 中所有通用视图(如 ListAPIView、RetrieveAPIView 等)的基础。
rxg456
2025/03/01
1940
从入门到"精通"Django REST Framework-(五)
Django REST framework+Vue 打造生鲜超市(五) 六、商品类别数据展示
六、商品类别数据展示 6.1. 商品类别数据接口 (1)商品分类有两个接口: 一种是全部分类:一级二级三级   一种是某一类的分类以及商品详细信息:  开始写商品分类的接口 (2)序列化 给分类添加三
zhang_derek
2018/04/13
2.4K0
Django REST framework+Vue 打造生鲜超市(五)
		六、商品类别数据展示
drf框架中分页组件
drf框架中分页组件 普通分页(最常用) 自定制分页类 pagination.py from rest_framework.pagination import PageNumberPagination # 普通分页 class CarPageNumberPagination(PageNumberPagination): # 默认一页的条数 page_size = 3 # 用户可以自定义选择一页的条数,但最多显示5条 page_size_query_param = 'page_
小小咸鱼YwY
2020/06/19
5600
相关推荐
day95-分页组件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验