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. Java实现最小堆一
  2. php 单例模式原理,PHP单例模式demo详解
  3. 群联固态硬盘修复工具_群联发布最高容量QLC硬盘: 15.36TB 碾压HDD
  4. Python学习_进程multiprocessing 多进程 协程
  5. Python之基本数据类型set常用基本方法简述
  6. Netty高性能之道
  7. verlay虚拟化技术_Overlay 网络技术,最想解决什么问题?
  8. VM 虚拟机 分辨率问题
  9. spark python编程 林子雨_林子雨编著《Spark编程基础(Python版)》教材第5章的命令行和代码...
  10. Python:暴力破解密码
  11. CPU0704报错处理
  12. multicast msdp 1
  13. python基础——求两个数的最大公因数和最小公倍数
  14. input()函数的简单介绍
  15. Windows安装GoldenDict
  16. 真的!这么写参数校验 (Validator) 就不会被劝退了。。。
  17. 中标麒麟 NeoKylin-SDK 里都有哪些库文件
  18. Java基础语法(十三):throw和throws
  19. Uniapp低功耗蓝牙操作实例
  20. 002 Ubuntu系统设置之调整界面大小

热门文章

  1. Android脚本打包
  2. 【分布计算环境学习笔记】4 Enterprise Java Bean
  3. hibernate常见错误汇总
  4. WAIC开发者日倒计时一天,收藏好这份完整日程
  5. face.evoLVe:高性能人脸识别开源库,内附高能模型
  6. linux 解压rar密码,linux下rar包的压缩与解压方案
  7. 0基础学Python,要报班吗?
  8. java stack 类 效率_Java中ArrayList、LinkedList、Vector、Stack的比较
  9. 报告 | 斯坦福2019 AI年度报告出炉!700亿美元投入AI,自动驾驶融资最多
  10. 《Python编程从入门到实践》记录之range、min、max、sum函数