首页 > 快讯 >

Django REST Framework-如何使用分页 焦点播报

2023-04-26 06:36:06 来源:腾讯云

在 Web 开发中,处理大量数据是非常常见的。但是,如果一次性返回所有数据,不仅会增加服务器的负担,而且还会影响客户端的响应时间。为了解决这个问题,分页被广泛应用于 Web 应用程序中,特别是在 RESTful API 中。

在 Django REST Framework 中,分页器是一种允许我们将查询结果划分为多个页面,并将每个页面的数据返回给客户端的工具。


(资料图片)

基于页码的分页器

基于页码的分页器将查询结果划分为多个页面,并使用页码来标识每个页面。客户端可以在查询参数中指定要请求的页面数,以及每个页面返回的对象数量。Django REST Framework 中内置了两种基于页码的分页器:PageNumberPaginationLimitOffsetPagination

PageNumberPagination

PageNumberPagination分页器是基于页码的分页器,允许客户端使用页码和每页返回的对象数量来请求不同的数据范围。以下是一个简单的使用 PageNumberPagination分页器的示例:

from rest_framework.pagination import PageNumberPaginationclass BookPagination(PageNumberPagination):    page_size = 10    page_query_param = "page"    max_page_size = 100class BookViewSet(viewsets.ModelViewSet):    queryset = Book.objects.all()    serializer_class = BookSerializer    pagination_class = BookPagination

在这个例子中,我们创建了一个名为 BookPagination的分页器类,并指定了默认的页面大小为 10,并将 page_query_param属性设置为 page,以便使用 page参数作为页码参数。我们还为客户端指定了可以在查询参数中使用的 pagepage_size参数,并设置了最大页面大小为 100。最后,我们将 BookPagination分页器类添加到 BookViewSet视图集合中。

现在,当客户端发起请求时,我们的 BookViewSet视图集合将使用 BookPagination分页器将查询结果划分为多个页面,并将每个页面的数据返回给客户端。客户端可以在查询参数中指定 pagepage_size参数来请求不同的数据范围。

LimitOffsetPagination

LimitOffsetPagination分页器也是一种基于页码的分页器,但与 PageNumberPagination不同的是,它允许客户端指定一个偏移量和每页返回的对象数量来请求数据。以下是一个简单的使用 LimitOffsetPagination分页器的示例:

from rest_framework.pagination import LimitOffsetPaginationclass BookPagination(LimitOffsetPagination):    default_limit = 10    limit_query_param = "limit"    offset_query_param = "offset"    max_limit = 100class BookViewSet(viewsets.ModelViewSet):    queryset = Book.objects.all()    serializer_class = BookSerializer    pagination_class = BookPagination

在这个例子中,我们创建了一个名为 BookPagination的分页器类,并指定了默认的页面大小为 10,并将 limit_query_paramoffset_query_param分别设置为 limitoffset,以便客户端可以使用 limitoffset参数来请求数据。我们还指定了最大限制为 100,并将 BookPagination分页器类添加到 BookViewSet视图集合中。

现在,当客户端发起请求时,我们的 BookViewSet视图集合将使用 LimitOffsetPagination分页器将查询结果划分为多个页面,并将每个页面的数据返回给客户端。客户端可以在查询参数中指定 limitoffset参数来请求不同的数据范围。

基于游标的分页器

基于游标的分页器与基于页码的分页器不同,它使用一个游标来标识要返回的数据范围。在客户端发送第一次请求时,服务器返回一组数据和一个游标。客户端使用这个游标来请求下一组数据。以下是一个简单的使用 CursorPagination分页器的示例:

from rest_framework.pagination import CursorPaginationclass BookPagination(CursorPagination):    page_size = 10    ordering = "title"class BookViewSet(viewsets.ModelViewSet):    queryset = Book.objects.all()    serializer_class = BookSerializer    pagination_class = BookPagination

在这个例子中,我们创建了一个名为 BookPagination的分页器类,并指定了默认的页面大小为 10,并将 ordering属性设置为 title,以便按标题排序。最后,我们将 BookPagination分页器类添加到 BookViewSet视图集合中。

现在,当客户端发起请求时,我们的 BookViewSet视图集合将使用 CursorPagination分页器将查询结果划分为多个页面,并将每个页面的数据返回给客户端。客户端可以使用 nextprevious参数来请求下一页和上一页。

在 Django REST Framework 中,分页器是一种将查询结果划分为多个页面并将每个页面的数据返回给客户端的工具。Django REST Framework 中内置了两种分页器,即基于页码的分页器和基于游标的分页器。在使用分页器时,我们可以指定默认的页面大小、页面参数和最大页面大小等属性,以及按特定的字段排序等选项。

上一篇:

未用专用账户收取佳兆业樾伴山花园预售款,深圳一公司被罚205万

下一篇:

最后一页

x
推荐阅读

Django REST Framework-如何使用分页 焦点播报

未用专用账户收取佳兆业樾伴山花园预售款,深圳一公司被罚205万

弘扬文明旅游新风尚 基本情况讲解_环球关注

MSI入围赛赛程公布:首场PSG对阵DFM BLG在5月3日晚8点交手R7 | 电竞头条

前沿资讯!天目湖白茶礼盒装一般一盒多少钱(天目湖门票多少钱)

中国制裁再升级,全面“断供”洛马雷神,美国撑腰也没用!|天天快看点

天天时讯:比亚迪供应_比亚迪供应商门户

世界微头条丨新风系统的作用与功能 新风系统哪个品牌好

迪哲医药科创板再融资审核状态更新为“已受理”-当前快讯

巴西打算继续与俄乌就协调问题进行对话 世界观点

世界看点:2023佛山顺峰山公园五一龙舟赛(时间+地点)

天天播报:用成都公积金还贷本息提取所需材料

向以鲜:如何理解杜甫的苦难书写?那是“民胞物与”的情怀|名人大讲堂·观点|天天新视野

【环球报资讯】海南矿业:洛克石油四川八角场气田脱烃处理厂及压缩站预计明年一季度可以投产

《长空之王》成为近五年五一档新片预售票房冠军

世界快讯:以“画”为媒!东莞青少年税收主题绘画大赛启动

ChatGPT火了 人工智能会造就未来“最佳员工”吗?

iqoo散热背夹pro功率

国家能源局:加快推进能源立法工作,研究完善深化能源革命、确保能源安全的政策体系|天天滚动

当前观点:steady me什么意思(steady me)

湖北十堰回应“重要水源区暗管偷排”:已锁定偷排责任企业,正固定证据移送公安机关_快消息

世界观点:jenkins项目上线(测试上线)教程

盖文启调研万宁市社会投资重点项目建设工作并现场办公|全球实时

每日聚焦:雪天盐业(600929):产品结构持续优化 盐化工板块逐步发力

“最美赵敏”猝死床上3天才被发现,悲惨身世曝光,太可怜了......_全球滚动

世界快消息!快讯 | 天士力:2023年一季度营业收入20.80亿元;归母净利润2.66亿元

一季度新疆GDP同比增长4.9%,多个指标增速全国第一 环球快资讯

匠心巨制!质感非凡的洋娃娃,女儿爱不释手! 环球资讯

每日快看:SSD靠边站!30TB机械硬盘出货

春风拂面放纸鸢

欣利国际摇号拿下长沙大王山010号宗地 成交价7.54亿元 天天速递

看热讯:多地“尝鲜”用数字人民币发工资 有何不同?

非洲多个计划出口的天然气项目面临风险-今亮点

天下秀22年净利润1.8亿 同比下滑49.2%;李开复减持美图2945万港元_世界新视野

我省成功发行2023年第三批政府债券

第六届全国高校青年教师教学竞赛决赛举办

广西首条时速350公里高铁有最新进展_环球看热讯

中东部回暖进程开启,江南华南五一前迎稳定型暖热

“狮王”争霸赛!将在合肥这里举行!|看点

天天快讯:好消息!“成都”男科医院前十名「排名公布」成都男性包皮环切术专科医院哪个好?

广东湛江:鼓励市、县国有企业牵头组织参与竞配光伏项目_世界即时

全球热消息:媒体融合加速 主流舆论壮大——2023中国网络媒体论坛综述

督导检查促提升 边查边改抓落实——西安市新城区法治督察组赴交警新城大队开展专项整治督导工作

世界快报:2023年一季度小额贷款公司统计数据报告

美媒:美政界充斥自私利己心态 任由脆弱群体遭受枪暴与疫情威胁

科瑞思(301314):该股换手率大于8%(04-25)

【全球新要闻】储能中标丨南网储能2023年至2025年机组黑启动试验中标公示!

热死了朋友圈(热死了)-热闻

信达证券发布药明康德研报,业绩符合预期,多业务协同稳健发展

一季度市场销售明显回升 我国消费呈现恢复向好态势