Django rest framework分页接口实现原理解析
作者:削微寒 发布时间:2023-08-22 21:26:36
如果没有设置分页,django-rest-framework 会将所有资源类表序列化后返回,如果资源很多,就会对网站性能造成影响。为此,我们来给博客文章列表 API 添加分页功能。
django-rest-framework 为分页功能提供了多个辅助类,常用的有:
PageNumberPagination
将资源分为第 1 页、第 2 页...第 n 页,使用页码号请求分页结果。
LimitOffsetPagination
通过 limit 和 offset 两个参数来控制请求的资源。例如通过发送 API 请求:/posts/?offset=20&limit=5,将获取文章资源列表第 20 篇后的 5 篇文章。如果 offset 以等差数列递增,limit 保持不变,则等价于按页码分页。但 offset 和 limit 可以为任意值,因此这种分页比 PageNumberPagination 更加灵活。
要使用分页功能非常简单,只需在项目的配置文件中配置好分页选项,即可全局启用分页功能。打开 config/common.py 配置文件,写入如下的分页配置:
REST_FRAMEWORK = {
# 设置 DEFAULT_PAGINATION_CLASS 后,将全局启用分页,所有 List 接口的返回结果都会被分页。
# 如果想单独控制每个接口的分页情况,可不设置这个选项,而是在视图函数中进行配置
"DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.PageNumberPagination",
# 这个选项控制分页后每页的资源个数
"PAGE_SIZE": 10,
}
配置完成之后,所有通用视图函数或者视图集生成的资源列表 API,返回的资源列表都会被分页。配置文件中的分页设置将作用于全局,如果某个视图函数或者视图集不想使用全局配置怎么办呢?可以在视图函数或者视图集中设置 pagination_class 属性,指定需要使用的分页辅助类即可。例如将博客文章列表分页替换为 limit offset 的分页方式,可以这样设置:
from rest_framewrok.pagination import PageNumberPagination
class PostViewSet(viewsets.GenericViewSet):
pagination_class = LimitOffsetPagination
这样,PostViewSet 视图集将返回 limit offset 分页形式的文章列表,而其他视图或者视图集仍将使用全局的分页配置。
请求文章 api,返回结果如下:
对返回结果的解释:
count:总资源数目
next:下一页资源的链接
previous:上一页资源的链接
results:当前页的资源列表
来源:https://www.cnblogs.com/xueweihan/p/12930845.html


猜你喜欢
- 组件值校验,即在组件值变化时判断是否满足校验逻辑,若不满足校验逻辑,可以拿到校验错误信息进行错误提示或其他逻辑处理。声明 valueVali
- 1 。打开您的Microsoft Visual Basic:点击确定,以下就按照蓝色的数字步骤.2 。修改工程名和类模块的名称:
- 1、使用while循环实现输出2 - 3 + 4 - 5 + 6 ... + 100的和#方法一#从2开始计算i = 2#定义一个变量用于保
- 一、普通用法 (手动调整size)view()相当于reshape、resize,重新调整Tensor的形状。import torcha1
- groupcache 简介在软件系统中使用缓存,可以降低系统响应时间,提高用户体验,降低某些系统模块的压力.groupcache是一款开源的
- Python中默认安装的ftplib模块定义了FTP类,可用来实现简单的ftp客户端,用于上传或下载文件。ftp登陆连接from ftpli
- 本文实例讲述了Python基于列表模拟堆栈和队列功能。分享给大家供大家参考,具体如下:之前的文章https://www.jb51.net/a
- 前言我们在前面的例子里,我们学习使用集合里字符或非集合里的字符,这时都是要把每个字符写出来的,但是有时需要把26个小写字母都放到集合里,那么
- 图形用户界面 (GUI)图形用户界面 (GUI) 只不过是一个桌面应用程序,可帮助我们与计算机进行交互像文本编辑器这样的 GUI 应用程序可
- Numpy中repeat函数使用Numpy是Python强大的数学计算库,和Scipy一起构建起Python科学计算生态。在本节下面我们重点
- django创建自定义模板处理器:一、需求来源:在django开发中,页面是通过template(模板)进行渲染的,对于一些数据,可以通过{
- VS Code是微软开源的一款编辑器,插件系统十分的丰富。本文就介绍了如何使用VS Code搭建Go语言开发环境。VS Code配置Go语言
- 图像有时候比数据更能满足人们的视觉需求Pytorch中保存图片的方式pytorch下保存图像有很多种方法,但是这些基本上都是基于图像处理的,
- 在我的电脑中存在多个版本的Python,实际工作中也时常需要切换Python版本来进行相关工作。在Pycharm的终端中使用python和i
- 异常可以防止出现一些不友好的信息返回给用户,有助于提升程序的可用性,在java中通过try ... catch ... finally来处理
- 前言order by满足两种情况,会使用 index 方式排序:order by语句使用索引最左前列(最左匹配法则)where子句和orde
- pandas按照多列排序ascending代码示例:import pandas as pd#读取文件df = pd.read_csv(
- 本文实例为大家分享了python实现简单俄罗斯方块游戏的具体代码,供大家参考,具体内容如下import pygame,sys,random,
- 在使用Python的过程中难免会遇到不同的项目使用不通同的Python环境,这就引出Python环境的切换问题这篇文章以3.11.0与3.1
- MySQL有多种存储引擎:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、