Django rest_framework 之分页器使用以及其源码分析

三种分页方式:

  • 常规分页 -->PageNumberPagination
  • 偏移分页 -->LimitOffsetPagination
  • cursor游标方式 -->CursorPagination

1.常规分页方式:

路由

  1. # 路由
  2. url(r'^books/', views.Book.as_view({'get':'get_all'}))
  1. # 模块导入
  2. from rest_framework.pagination import PageNumberPagination,CursorPagination,
  3. LimitOffsetPagination
  4. # PageNumberPagination 常规分页
  5. # LimitOffsetPagination 偏移分页
  6. # CursorPagination 游标分页
  7. class Book(ViewSetMixin, APIView):
  8. def get_all(self, request):
  9. response = {'status': 100, 'msg': '查询成功'}
  10. book_list = models.Book.objects.all()
  11. # 实例化产生一个分页对象
  12. # 不继承来修改对象的值
  13. page=PageNumberPagination()
  14. page.page_size=2 # 每页显示的个数
  15. page.page_query_param='pag' # 路由中?后面的key,指定页码
  16. page.page_size_query_param = 'size' # 指定当前页显示多少条
  17. page.max_page_size = 5 # 每页最多显示多少条
  18. # 第一个参数:要分页的数据,第二个参数request对象,第三个参数,当前视图对象
  19. page_list = page.paginate_queryset(book_list, request, self)
  20. # 再序列化的时候,用分页之后的数据
  21. ser = mySer.BookSerializer(instance=page_list, many=True)
  22. # 会带着链接,和总共的条数(不建议用,会把总数据条数返回)
  23. # return page.get_paginated_response(ser.data)
  24. return Response(ser.data)
  1. REST_FRAMEWORK = {
  2. # 每页显示两条
  3. 'PAGE_SIZE':2
  4. }

2.偏移分页(LimitOffsetPagination)

  1. from rest_framework.pagination import LimitOffsetPagination
  2. class Book(ViewSetMixin, APIView):
  3. def get_all(self, request):
  4. response = {'status': 100, 'msg': '查询成功'}
  5. book_list = models.Book.objects.all()
  6. # 实例化产生一个偏移分页对象
  7. page=LimitOffsetPagination()
  8. page.default_limit = 3 # 每页显示的条数
  9. page.offset_query_param = 'offset' # 从哪一页开始的标杆的key,如 offset=3
  10. page.limit_query_param = 'limit' # 往后偏移多少的key值,如 limit=4
  11. page.max_limit = 5 # 每页显示最大的条数
  12. page_list = page.paginate_queryset(book_list, request, self)
  13. ser = mySer.BookSerializer(instance=page_list, many=True)
  14. return Response(ser.data)

3、游标分页(CursorPagination)

  1. http://127.0.0.1:8000/books/?cursor=cj0xJnA9MTA%3D
  2. from rest_framework.pagination import CursorPagination
  3. class Book(ViewSetMixin, APIView):
  4. def get_all(self, request):
  5. book_list = models.Book.objects.all()
  6. # 实例化产生一个加密分页对象
  7. page = CursorPagination()
  8. page.page_size = 3 # 每页显示多少条
  9. page.ordering = 'nid' # 按nid排序
  10. page.cursor_query_param = 'cursor' # 查询的key值
  11. page_list = page.paginate_queryset(book_list, request, self)
  12. ser = mySer.BookSerializer(instance=page_list, many=True)
  13. return page.get_paginated_response(ser.data)

分页器总结

  1. -分页
  2. 1 常规分页
  3. -基本使用:
  4. -page=PageNumberPagination实例化产生对象
  5. -返回值=page.paginate_queryset(ret,request,self):ret是要分页的所有数据,
  6. -再序列化,序列化该返回值
  7. -四个参数
  8. #每页显示多少条
  9. page.page_size=3
  10. #查询指定查询哪一页的key值
  11. page.page_query_param='xxx'
  12. #前端控制每页显示多少条的查询key值比如size=9,表示一页显示9条
  13. page.page_size_query_param='size'
  14. #控制每页最大显示多少,size如果传100,最多也是显示10
  15. page.max_page_size=10
  16. 2 偏移分页
  17. -基本使用:
  18. -page=LimitOffsetPagination实例化产生对象
  19. -返回值=page.paginate_queryset(ret,request,self):ret是要分页的所有数据,
  20. -再序列化,序列化该返回值
  21. -四个参数:
  22. #从标杆位置往后取几个,默认取3个,我可以指定
  23. page.default_limit=3
  24. #每次取得条数
  25. page.limit_query_param='limit'
  26. #标杆值,现在偏移到哪个位置,如果offset=6 表示当前在第6条位置上,往后取
  27. page.offset_query_param='offset'
  28. #最大取10条
  29. page.max_limit=10
  30. 3 cursor游标方式
  31. -基本使用:
  32. -page=CursorPagination实例化产生对象
  33. -返回值=page.paginate_queryset(ret,request,self):ret是要分页的所有数据,
  34. -再序列化,序列化该返回值
  35. -三个参数:
  36. #每页显示的大小
  37. page.page_size=3
  38. #查询的key值
  39. page.cursor_query_param='cursor'
  40. # 按什么排序
  41. page.ordering='id'
  42. -注意:get_paginated_response:调用这个方法返回的数据中会有总条数,上一页地址,下一页地址

Django 之 rest_framework 分页器使用的更多相关文章

  1. WEB框架-Django组件学习-分页器学习

    1.分页器基础学习 1.1 补充知识-批量创建 数据库中数据批量创建,不要每创建一个就往数据库中塞一个,会造成撞库,造成大量I/O操作,速速较慢,应该采用一次性创建大量数据,一次性将大量数据塞入到数据 ...

  2. Django的rest_framework的分页组件源码分析

    前言: 分页大家应该都很清楚,今天我来给大家做一下Django的rest_framework的分页组件的分析:我的讲解的思路是这样的,分别使用APIview的视图类和基于ModelViewSet的视图 ...

  3. Django的rest_framework的权限组件和频率组件源码分析

    前言: Django的rest_framework一共有三大组件,分别为认证组件:perform_authentication,权限组件:check_permissions,频率组件:check_th ...

  4. Django的rest_framework认证组件之局部设置源码解析

    前言: Django的rest_framework组件的功能很强大,今天来我来给大家剖析一下认证组件 下面进入正文分析,我们从视图开始,一步一步来剖析认证组件 1.进入urls文件 url(r'^lo ...

  5. Django的rest_framework的视图之基于ModelViewSet视图源码解析

    前言 今天一直在整理Django的rest_framework的序列化组件,前面一共写了2篇博客,前面的博客给的方案都是一个中间的状态的博客,其中有很多的冗余的代码,如果有朋友不清楚,可以先看下我前面 ...

  6. django中的分页器组件

    目录 django的组件-分页器 引入分页器 分页器demo 创建数据库模型 url控制器 views视图函数 templates模板 为什么要用分页器 导入分页器 分页器优化1 分页器优化2 有多少 ...

  7. Django 之 rest_framework 响应器使用

    Django 之 rest_framework 响应器使用 使用部分: 第一步:导入模块 from rest_framework.renders import BrowsableAPIRenderer ...

  8. django的rest_framework框架源码剖析

    在看源码之前先了解一下什么是rest,restful api. 什么是rest 可以总结为一句话:REST是所有Web应用都应该遵守的架构设计指导原则. REST是Representational S ...

  9. Django组件 之 分页器(paginator)

    --------------------------------------------------------------------------------路虽远,行则将至.  事虽难,做则必成. ...

随机推荐

  1. 【字符串】 Z-algorithm

    Z-algorithm Algorithm Task 给定一个文本串 \(S\) 和一个模式串 \(T\),求 \(T\) 对于 \(S\) 的每个后缀子串的公共前缀子串. Limitations 要 ...

  2. typora的使用技巧

    目录 Typora 的 markdown 语法 标题: 插入图片: 链接: 字体变化: 删除: 文字高亮: 角标: 文本方位: :-:| :- | -: 制作表格: 常用快捷键(补充): 下划线: T ...

  3. Cookie、token、session的区别是什么?

    背景: 最近在总结一些容易理解混淆的概念,之前面试的时候提到过,我觉得也说不清楚,这两天项目做接口测试发现用的cookie而不是之前的token,于是总结一下,便于以后用到的时候再阅读以及分享给需要的 ...

  4. GEO2R

    GEO2R 是GEO数据库官方提供的一个工具,用于进行差异表达分析. 该工具实现的功能就是将GEO数据库中的数据导入到R语言中,然后进行差异分析,本质是通过以下两个bioconductor上的R包实现 ...

  5. rsync 使用方法 ssh免密问题 不同端口同步

    不同端口同步(前提还是做好免密) 主要通过选项-e "ssh -p 端口"来实现 重命名了秘钥文件 指定-i即可~ 1. 本地目录同步到导地不同端口主机目录 [root@bakse ...

  6. 日志篇 随着win10更新...

    随着win10更新到最新..我发现电脑出了点状况.. 一 是电脑睡眠主机不关闭...然后用了 https://jingyan.baidu.com/article/cb5d6105d76343005c2 ...

  7. jdk 1.7新特性

    JDK1.7新特性 1,switch中可以使用字串了String s = "test";   switch (s) {   case "test" :      ...

  8. sqlcode与sqlerrm的区别

    sqlCode:是数据库操作的返回码,其中0--成功:-1--失败:100--没有检索到数据. sqlerrm:是数返回指定错误代码的错误信息. 在一个内在的异常中,SQLCODE返回Oracle错误 ...

  9. shell三剑客之sed

    背景 sed(Stream Editor 流编辑器),作为三剑客的一份子,主要的功能有增删改查.为什么称之为"流"编辑器呢?大家知道:在Linux文件系统中,一切都可以作为文件来处 ...

  10. nginx返回file not found原因

    nginx返回file not found原因1 确实没有这个文件2 没有权限访问这个网站目录!!!