01-分页模式

rest framework中提供了三种分页模式:from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination

02-全局配置

REST_FRAMEWORK = {'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination','PAGE_SIZE': 100
}

03-局部配置

我们可以在视图类中进行局部设置

class PublisherViewSet(ModelViewSet):queryset = models.Publisher.objects.all()serializer_class = PublisherModelSerializerpagination_class = PageNumberPagination  # 注意不是列表(只能有一个分页模式)

04-内置分页器-PageNumberPagination

按页码数分页,第n页,每页显示m条数据例如:http://127.0.0.1:8000/api/article/?page=2&size=1

class MyPageNumber(PageNumberPagination):page_size = 2  # 每页显示多少条page_size_query_param = 'size'  # URL中每页显示条数的参数page_query_param = 'page'  # URL中页码的参数max_page_size = None  # 最大页码数限制

4.1 视图

class ArticleList(APIView):def get(self, request, *args, **kwargs):res = {"code": 0}article_list = models.Article.objects.all().order_by("id")# 分页page_obj = MyPageNumber()page_article = page_obj.paginate_queryset(queryset=article_list, request=request, view=self)ser_obj = ArticleSerializer(page_article, many=True)res["data"] = ser_obj.datareturn Response(res)

4.2 返回带页码链接的响应

class ArticleList(APIView):def get(self, request, *args, **kwargs):res = {"code": 0}article_list = models.Article.objects.all().order_by("id")# 分页page_obj = MyPageNumber()page_article = page_obj.paginate_queryset(queryset=article_list, request=request, view=self)ser_obj = ArticleSerializer(page_article, many=True)res["data"] = ser_obj.datareturn page_obj.get_paginated_response(res)

05-LimitOffsetPagination

分页,在n位置,向后查看m条数据例如:http://127.0.0.1:8000/api/article/?offset=2&limit=2

5.1 分页器

# offset分页
class MyLimitOffset(LimitOffsetPagination):default_limit = 1limit_query_param = 'limit'offset_query_param = 'offset'max_limit = 999

5.2 视图

class ArticleList(APIView):def get(self, request, *args, **kwargs):res = {"code": 0}article_list = models.Article.objects.all().order_by("id")# 分页page_obj = MyLimitOffset()page_article = page_obj.paginate_queryset(queryset=article_list, request=request, view=self)ser_obj = ArticleSerializer(page_article, many=True)res["data"] = ser_obj.datareturn page_obj.get_paginated_response(res)

06-CursorPagination

加密分页,把上一页和下一页的id值记住

6.1 分页器

# 加密分页
class MyCursorPagination(CursorPagination):cursor_query_param = 'cursor'page_size = 1ordering = '-id'  # 重写要排序的字段

6.2 视图

class ArticleList(APIView):def get(self, request, *args, **kwargs):res = {"code": 0}article_list = models.Article.objects.all().order_by("id")# 分页page_obj = MyCursorPagination()page_article = page_obj.paginate_queryset(queryset=article_list, request=request, view=self)ser_obj = ArticleSerializer(page_article, many=True)res["data"] = ser_obj.data# return Response(res)return page_obj.get_paginated_response(res)

转载于:https://www.cnblogs.com/pgxpython/p/10287876.html

05 Django REST Framework 分页相关推荐

  1. Django REST framework 分页

    三种分页:根据页码.根据索引.根据加密 http://www.xx.com/courses/?page=1&size=10 http://www.xx.com/courses/?offset= ...

  2. Django Rest Framework源码剖析(七)-----分页

    一.简介 分页对于大多数网站来说是必不可少的,那你使用restful架构时候,你可以从后台获取数据,在前端利用利用框架或自定义分页,这是一种解决方案.当然django rest framework提供 ...

  3. 如何在 Django REST Framework 中对分页结果过滤和排序?

    作者 | 大江狗  责编 | 张文 来源 | Python Web 与 Django 开发 (ID:Python_Web_Django) 在本篇文章中我们将向你演示如何在 Django REST Fr ...

  4. Django Rest Framework(一)

    一.什么是RESTful REST与技术无关,代表一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为"表征状态转移". R ...

  5. Vue+Django REST framework打造生鲜电商项目

    1-1 课程导学 2-1 Pycharm的安装和简单使用 2-2 MySQL和Navicat的安装和使用 2-3 Windows和Linux下安装Python2和Python3 2-4 虚拟环境的安装 ...

  6. Django REST framework的一些奇巧淫技(干货!!!)

    开始之前,假设你已经有Django和Django REST framework的一些基础了 mixins,ViewSet和routers配合使用 minxis的类有5种 CreateModelMixi ...

  7. Django REST framework 1

    Django REST framework Django REST framework官方文档:点击  中文文档:点击 安装djangorestframework:pip3 install djang ...

  8. django html5 关系,Django REST FrameWork中文教程5:关系和超链接API

    目前我们的API中的关系是用主键表示的.我们将通过使用超链接来提高我们API的内部联系. 为我们的API创建一个根路径 现在我们有'snippets'和'users'的路径,但是我们的API没有一个入 ...

  9. Django REST framework【学习内容】

    快速入门 我们将创建一个简单的允许管理员用户查看和编辑系统中的用户和组的API. 项目设置 创建一个名为 tutorial 的新django项目,然后启动一个名为 quickstart 的新app. ...

最新文章

  1. 亚马逊面部识别闹大笑话:竟28名美国议员识别为罪犯
  2. form左上角有个锁的符号_第三章 表单笔记
  3. 来自数据源的 String 类型的给定值不能转换为指定目标列的类型 nvarchar。
  4. 计算机处理器采用多核,电脑的CPU的多核很有用吗?
  5. SwiftUI之深入解析高级动画的几何效果GeometryEffect
  6. 编写高质量代码:改善Java程序的151个建议(第3章:类、对象及方法___建议36~40)
  7. 深度强化学习在时序数据压缩中的应用--ICDE 2020收录论文
  8. echart单击后获取横坐标值_Excel综合应用(1): 批量打印格式化后的表格
  9. Go语言编程笔记1:Hello World
  10. 工业相机录像丢帧的解决方案
  11. linux audio device driver音频设备驱动
  12. 移动APP开发框架盘点
  13. stm32usb功能设备以及在linux下的USB相关总线、设备驱动笔记
  14. 数据库第6章总结——关系数据理论
  15. 2017年一季度工作回顾及感悟
  16. destoon调用内容从第几篇开始
  17. jbod ugood 磁盘驱动状态_JBOD磁盘配置和StorCLI命令使用小结
  18. WGL中的Scan信息的解析
  19. dns劫持教您dns被劫持如何修复、dns劫持如何修复
  20. 小程序常见故障解决方法分享|微信小程序平台常见拒绝情形

热门文章

  1. Java移位操作小测试
  2. discuz NT!整合
  3. 字节跳动实验室招聘户型图理解实习生|北京
  4. CVPR 2020 细粒度分类挑战赛冠军方案:数据增强+知识蒸馏,效果大幅提升
  5. Scale Match:国科大提出小目标检测的尺度匹配方法,用于预训练数据集处理
  6. 当时尚遇上AI!港中文MMLab开源MMFashion工具箱
  7. 今日头条新出算法大赛!短视频内容理解与推荐竞赛
  8. java调mongodb自定义函数,自定义UDF函数,从hive保存到mongodb
  9. 每天两小时,吃透法国TOP双硕专家匠心打造的这套目标检测、卷积神经网络和OpenCV学习笔记(保姆级/20G高清/PPT/代码)...
  10. 清华大学团队夺冠AAAI 2021国际深度元学习挑战赛