Django 基础(12)-Django drf 分页查询(批量查询)、自定义分页器
文章目录
- Django drf 分页查询(批量查询)
- PageNumberPagination:普通分页
- Django 自定义分页器
- 自定义批量查询的返回结构
- LimitOffsetPagination:偏移分页
- CursorPagination:游标分页 -- 速度快,但不能指定查询
- 参考
Django drf 分页查询(批量查询)
REST framework提供了分页的支持
我们可以在配置文件中设置全局的分页方式,如:
REST_FRAMEWORK = {'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination','PAGE_SIZE': 100 # 每页数目
}
也可单独为视图添加不同分页行为。在视图中通过pagination_clas属性来指明
class AssetsViewSet(ModelViewSet):queryset = AssetsModel.objects.all()permission_classes = [AllowAny]pagination_class = LimitOffsetPagination...
也可通过自定义Pagination类,来为视图添加不同分页行为:
class LargeResultsSetPagination(PageNumberPagination):page_size = 1000page_size_query_param = 'page_size'max_page_size = 10000
class BookDetailView(RetrieveAPIView):queryset = BookInfo.objects.all()serializer_class = BookInfoSerializerpagination_class = LargeResultsSetPagination
注意:如果在视图内关闭分页功能,只需在视图内设置
pagination_class = None
PageNumberPagination:普通分页
前端访问网址形式:
GET http://127.0.0.1:8000/student/?page=4
使用比较常见,前端会显示出,现在总共多少页。
Django 自定义分页器
可以在子类中定义的属性:
page_size – 每页数目
page_query_param – 前端发送的页数关键字名,默认为”page”
page_size_query_param – 允许客户端根据每个请求设置页面大小。默认为 None,表示客户端无法控制所请求的页面大小。
max_page_size – 前端最多能设置的每页数量
注意 我们自定义分页类时,一定要配置 page_size_query_param,否则它的默认值为None, 表示客户端无法控制所请求的页面大小。是由后台配置的。
from rest_framework.pagination import PageNumberPaginationclass MyPageNumberPagination(PageNumberPagination):page_size = 3 # 每页显示3条数据page_query_param = 'page' # 查询参数page_size_query_param = 'size'max_page_size = 5 # 最大每页显示五条数据
如上代码
前端请求路径:
/api/v1/asset?batch=1&batch_size=5
返回结果:
{"count": 4,"next": "http://127.0.0.1:8001/api/v1/asset/?batch=2&batch_size=5","previous": null,"results": [{"id": 6,"asset_id": "773","asset_type": " asset_type","asset_name": "aaaaa","mgmt_ip": "1.13.1.1","protocol": "bbbbb","tenant_id": "ggggggggg","description": "sssssss"},{"id": 7,"asset_id": "494","asset_type": " asset_type","asset_name": "aaaaa","mgmt_ip": "1.13.1.1","protocol": "bbbbb","tenant_id": "ggggggggg","description": "sssssss"},{"id": 8,"asset_id": "171","asset_type": " asset_type","asset_name": "cccccccccccc","mgmt_ip": "1.13.1.1","protocol": "bbbbb","tenant_id": "ggggggggg","description": "sssssss"}]
}
如上,是我们不复写 def list的自动返回。
如果我要自定义批量查询的返回结构呢?
自定义批量查询的返回结构
Django Rest framework 分页的使用
参考URL: https://blog.csdn.net/weixin_43603327/article/details/839615
比如,这里我想删掉 count、next、previous 字段,返回格式改成:
{"status_code":200,"data": {“result”: [{...}
思路: 复写 def list方法,在里面操作获取数据,组装返回给前端的结构。 推荐阅读本标题下参考URL。
#自定义分页类
class MyPageNumberPagination(PageNumberPagination):#每页显示多少个page_size = 3#默认每页显示3个,可以通过传入pager1/?page=2&size=4,改变默认每页显示的个数page_size_query_param = "size"#最大页数不超过10max_page_size = 10#获取页码数的page_query_param = "page"class Pager1View(APIView):def get(self,request,*args,**kwargs):#获取所有数据roles = models.Role.objects.all()#创建分页对象,这里是自定义的MyPageNumberPaginationpg = MyPageNumberPagination()#获取分页的数据page_roles = pg.paginate_queryset(queryset=roles,request=request,view=self)#对数据进行序列化ser = PagerSerialiser(instance=page_roles,many=True)return Response({"status_code": 200, 'data': {'result':ser.data}})
LimitOffsetPagination:偏移分页
前端访问网址形式:
GET http://127.0.0.1/four/student/?limit=100&offset=400
这是veiw层,添加:
pagination_class = LimitOffsetPagination
CursorPagination:游标分页 – 速度快,但不能指定查询
Django-drf-内置分页器的使用
参考URL: https://zhuanlan.zhihu.com/p/286671626
参考
Django-drf-内置分页器的使用
参考URL: https://zhuanlan.zhihu.com/p/286671626
Django Rest framework 分页的使用
参考URL: https://blog.csdn.net/weixin_43603327/article/details/83961568
Django 基础(12)-Django drf 分页查询(批量查询)、自定义分页器相关推荐
- 【Django基础】Django快速入门
本系列为 Django 官方文档学习笔记. 文档地址:https://docs.djangoproject.com/zh-hans/3.2/contents/ 环境:macOS10.13.1 + py ...
- ajax调用api改表格数据库,【django基础】django接口 异步ajax请求 导出数据库成excel表(包裹前端后端)...
py文件: from django.utils.http import urlquote from rest_framework.views import APIView from django.sh ...
- 搜狗权重批量查询 批量查询搜狗权重的方法
最近入职了一家SEO公司,接手管理了400多个网站,需要每天查询搜狗权重情况,但是手动一个一个非常的耗时间,但是有什么方法可以快速批量查询搜狗权重呢? 最近发现使用iis7站长之家的批量查询搜 ...
- 物流查询 批量查询物流信息并复制快递单号和公司
如何快速查询物流信息,并复制快递单号和公司呢?今天小编分享一个方法,快速查询物流信息,并快速分析筛选单号复制快递单号和公司,下面一起来看看吧!希望大家可以用到. 第一步,运行快递批量查询高手,在软件功 ...
- Django框架(12.Django中模型类高阶查询(Q对象以及F对象 和聚合函数查询))
Q对象 作用:用于查询时条件之间的逻辑关系.not and or,可以对Q对象进行 & | ~ 操作. & : 且 | : 或 ~ :非: 就 ...
- Django基础(11): 表单集合Formset的高级用法详解
Formset(表单集)是多个表单的集合.Formset在Web开发中应用很普遍,它可以让用户在同一个页面上提交多张表单,一键添加多个数据,比如一个页面上添加多个用户信息.今天小编我就介绍下Djang ...
- django ajax 查询,Django分页和Ajax查询
在Django中,实现分页以在多个页面上显示查询项目是非常简单的.使用Ajax仅更新实际发生更改的页面位,而不是每次加载整个页面也是非常直接的.但是,当我们将两者结合在一起时,我发现它有点问题.Dja ...
- 学一点django基础
学一点Django基础 目录 文章目录 目录 一.Django框架的介绍 Django的安装 Django框架开发 创建项目的指令 Django项目的目录结构 URL 介绍 视图函数(view) Dj ...
- Django基础--Django基本命令、路由配置系统(URLconf)、编写视图、Template、数据库与ORM...
web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构. 使用框架可以帮你快速开发特定的系统. 简单地说,就是你用别人搭建好的舞台来做表演. 尝试搭建一个简单 ...
最新文章
- 自定义圆形控件 RoundImageView
- java 判断端口是否被占用_java检测端口是否被占用详解
- HTML怎么让正方形转动,第十讲:html5中canvas实现正方体的动态旋转
- YOLOv5瓷砖表面瑕疵质检
- 【洛谷1962】 斐波那契数列
- 中国燕麦片市场销售现状与十四五发展趋势分析报告2022年版
- 【第三方对接】使用 永中Office 实现在线 Office 整合到 Spring 项目
- STC15W单片机解析GPS数据
- 将哔哩哔哩手机端缓存视频导出为正常mp4视频.
- 微信小程序授权登录详细解析
- sap 双计量单位_ERP软件中双计量单位如何使用
- 由batch 命令setlocal enabledelayedexpansion引发的
- 六十六条经典禅语名句
- 西瓜创客python课程、8岁可以上课吗_有家长让孩子用西瓜创客学编程的吗,感觉怎么样?...
- 星盈科技虚拟带库VTL-100面市 可节省30倍空间
- Java前端学习(Day 1)
- 登陆人人网爬取个人信息
- jsp页面使用webcam,获取照片
- edge浏览器如何把网页放到桌面_win10系统设置edge浏览器快捷方式放到桌面的操作方法...
- 异丁酸酐(CAS 97-72-3)的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
热门文章
- 万字解读区块链游戏行业:洞察游戏的未来
- 好玩的人脸识别小软件
- qq轻聊版打开后显示服务器返回数据错误,QQ轻聊版已从官方消失 腾讯难道反悔了?...
- 2010-2019考研英语二 阅读真题+答案
- [nginx]nginx rewrite or internal redirection cycle while internally redirecting
- 6000php相当于,jquery – Javascript中的PMT
- 计算机网络协议编号是什么,因特网协议
- youtube python 中文_youtube dl python库文档
- 1617_MIT 6.828 JOS boot代码分析
- html 显示 pdf