文章目录

  • 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 分页查询(批量查询)、自定义分页器相关推荐

  1. 【Django基础】Django快速入门

    本系列为 Django 官方文档学习笔记. 文档地址:https://docs.djangoproject.com/zh-hans/3.2/contents/ 环境:macOS10.13.1 + py ...

  2. ajax调用api改表格数据库,【django基础】django接口 异步ajax请求 导出数据库成excel表(包裹前端后端)...

    py文件: from django.utils.http import urlquote from rest_framework.views import APIView from django.sh ...

  3. 搜狗权重批量查询 批量查询搜狗权重的方法

    最近入职了一家SEO公司,接手管理了400多个网站,需要每天查询搜狗权重情况,但是手动一个一个非常的耗时间,但是有什么方法可以快速批量查询搜狗权重呢?     最近发现使用iis7站长之家的批量查询搜 ...

  4. 物流查询 批量查询物流信息并复制快递单号和公司

    如何快速查询物流信息,并复制快递单号和公司呢?今天小编分享一个方法,快速查询物流信息,并快速分析筛选单号复制快递单号和公司,下面一起来看看吧!希望大家可以用到. 第一步,运行快递批量查询高手,在软件功 ...

  5. Django框架(12.Django中模型类高阶查询(Q对象以及F对象 和聚合函数查询))

    Q对象 作用:用于查询时条件之间的逻辑关系.not and or,可以对Q对象进行  &  |  ~  操作. & : 且        | :  或          ~ :非: 就 ...

  6. Django基础(11): 表单集合Formset的高级用法详解

    Formset(表单集)是多个表单的集合.Formset在Web开发中应用很普遍,它可以让用户在同一个页面上提交多张表单,一键添加多个数据,比如一个页面上添加多个用户信息.今天小编我就介绍下Djang ...

  7. django ajax 查询,Django分页和Ajax查询

    在Django中,实现分页以在多个页面上显示查询项目是非常简单的.使用Ajax仅更新实际发生更改的页面位,而不是每次加载整个页面也是非常直接的.但是,当我们将两者结合在一起时,我发现它有点问题.Dja ...

  8. 学一点django基础

    学一点Django基础 目录 文章目录 目录 一.Django框架的介绍 Django的安装 Django框架开发 创建项目的指令 Django项目的目录结构 URL 介绍 视图函数(view) Dj ...

  9. Django基础--Django基本命令、路由配置系统(URLconf)、编写视图、Template、数据库与ORM...

    web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构. 使用框架可以帮你快速开发特定的系统. 简单地说,就是你用别人搭建好的舞台来做表演. 尝试搭建一个简单 ...

最新文章

  1. 自定义圆形控件 RoundImageView
  2. java 判断端口是否被占用_java检测端口是否被占用详解
  3. HTML怎么让正方形转动,第十讲:html5中canvas实现正方体的动态旋转
  4. YOLOv5瓷砖表面瑕疵质检
  5. 【洛谷1962】 斐波那契数列
  6. 中国燕麦片市场销售现状与十四五发展趋势分析报告2022年版
  7. 【第三方对接】使用 永中Office 实现在线 Office 整合到 Spring 项目
  8. STC15W单片机解析GPS数据
  9. 将哔哩哔哩手机端缓存视频导出为正常mp4视频.
  10. 微信小程序授权登录详细解析
  11. sap 双计量单位_ERP软件中双计量单位如何使用
  12. 由batch 命令setlocal enabledelayedexpansion引发的
  13. 六十六条经典禅语名句
  14. 西瓜创客python课程、8岁可以上课吗_有家长让孩子用西瓜创客学编程的吗,感觉怎么样?...
  15. 星盈科技虚拟带库VTL-100面市 可节省30倍空间
  16. Java前端学习(Day 1)
  17. 登陆人人网爬取个人信息
  18. jsp页面使用webcam,获取照片
  19. edge浏览器如何把网页放到桌面_win10系统设置edge浏览器快捷方式放到桌面的操作方法...
  20. 异丁酸酐(CAS 97-72-3)的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告

热门文章

  1. 万字解读区块链游戏行业:洞察游戏的未来
  2. 好玩的人脸识别小软件
  3. qq轻聊版打开后显示服务器返回数据错误,QQ轻聊版已从官方消失 腾讯难道反悔了?...
  4. 2010-2019考研英语二 阅读真题+答案
  5. [nginx]nginx rewrite or internal redirection cycle while internally redirecting
  6. 6000php相当于,jquery – Javascript中的PMT
  7. 计算机网络协议编号是什么,因特网协议
  8. youtube python 中文_youtube dl python库文档
  9. 1617_MIT 6.828 JOS boot代码分析
  10. html 显示 pdf