Django 之 rest_framework 分页器使用
Django rest_framework 之分页器使用以及其源码分析
三种分页方式:
- 常规分页 -->PageNumberPagination
- 偏移分页 -->LimitOffsetPagination
- cursor游标方式 -->CursorPagination
1.常规分页方式:
路由
# 路由
url(r'^books/', views.Book.as_view({'get':'get_all'}))
# 模块导入
from rest_framework.pagination import PageNumberPagination,CursorPagination,
LimitOffsetPagination
# PageNumberPagination 常规分页
# LimitOffsetPagination 偏移分页
# CursorPagination 游标分页
class Book(ViewSetMixin, APIView):
def get_all(self, request):
response = {'status': 100, 'msg': '查询成功'}
book_list = models.Book.objects.all()
# 实例化产生一个分页对象
# 不继承来修改对象的值
page=PageNumberPagination()
page.page_size=2 # 每页显示的个数
page.page_query_param='pag' # 路由中?后面的key,指定页码
page.page_size_query_param = 'size' # 指定当前页显示多少条
page.max_page_size = 5 # 每页最多显示多少条
# 第一个参数:要分页的数据,第二个参数request对象,第三个参数,当前视图对象
page_list = page.paginate_queryset(book_list, request, self)
# 再序列化的时候,用分页之后的数据
ser = mySer.BookSerializer(instance=page_list, many=True)
# 会带着链接,和总共的条数(不建议用,会把总数据条数返回)
# return page.get_paginated_response(ser.data)
return Response(ser.data)
REST_FRAMEWORK = {
# 每页显示两条
'PAGE_SIZE':2
}
2.偏移分页(LimitOffsetPagination)
from rest_framework.pagination import LimitOffsetPagination
class Book(ViewSetMixin, APIView):
def get_all(self, request):
response = {'status': 100, 'msg': '查询成功'}
book_list = models.Book.objects.all()
# 实例化产生一个偏移分页对象
page=LimitOffsetPagination()
page.default_limit = 3 # 每页显示的条数
page.offset_query_param = 'offset' # 从哪一页开始的标杆的key,如 offset=3
page.limit_query_param = 'limit' # 往后偏移多少的key值,如 limit=4
page.max_limit = 5 # 每页显示最大的条数
page_list = page.paginate_queryset(book_list, request, self)
ser = mySer.BookSerializer(instance=page_list, many=True)
return Response(ser.data)
3、游标分页(CursorPagination)
http://127.0.0.1:8000/books/?cursor=cj0xJnA9MTA%3D
from rest_framework.pagination import CursorPagination
class Book(ViewSetMixin, APIView):
def get_all(self, request):
book_list = models.Book.objects.all()
# 实例化产生一个加密分页对象
page = CursorPagination()
page.page_size = 3 # 每页显示多少条
page.ordering = 'nid' # 按nid排序
page.cursor_query_param = 'cursor' # 查询的key值
page_list = page.paginate_queryset(book_list, request, self)
ser = mySer.BookSerializer(instance=page_list, many=True)
return page.get_paginated_response(ser.data)
分页器总结
-分页
1 常规分页
-基本使用:
-page=PageNumberPagination实例化产生对象
-返回值=page.paginate_queryset(ret,request,self):ret是要分页的所有数据,
-再序列化,序列化该返回值
-四个参数
#每页显示多少条
page.page_size=3
#查询指定查询哪一页的key值
page.page_query_param='xxx'
#前端控制每页显示多少条的查询key值比如size=9,表示一页显示9条
page.page_size_query_param='size'
#控制每页最大显示多少,size如果传100,最多也是显示10
page.max_page_size=10
2 偏移分页
-基本使用:
-page=LimitOffsetPagination实例化产生对象
-返回值=page.paginate_queryset(ret,request,self):ret是要分页的所有数据,
-再序列化,序列化该返回值
-四个参数:
#从标杆位置往后取几个,默认取3个,我可以指定
page.default_limit=3
#每次取得条数
page.limit_query_param='limit'
#标杆值,现在偏移到哪个位置,如果offset=6 表示当前在第6条位置上,往后取
page.offset_query_param='offset'
#最大取10条
page.max_limit=10
3 cursor游标方式
-基本使用:
-page=CursorPagination实例化产生对象
-返回值=page.paginate_queryset(ret,request,self):ret是要分页的所有数据,
-再序列化,序列化该返回值
-三个参数:
#每页显示的大小
page.page_size=3
#查询的key值
page.cursor_query_param='cursor'
# 按什么排序
page.ordering='id'
-注意:get_paginated_response:调用这个方法返回的数据中会有总条数,上一页地址,下一页地址
Django 之 rest_framework 分页器使用的更多相关文章
- WEB框架-Django组件学习-分页器学习
1.分页器基础学习 1.1 补充知识-批量创建 数据库中数据批量创建,不要每创建一个就往数据库中塞一个,会造成撞库,造成大量I/O操作,速速较慢,应该采用一次性创建大量数据,一次性将大量数据塞入到数据 ...
- Django的rest_framework的分页组件源码分析
前言: 分页大家应该都很清楚,今天我来给大家做一下Django的rest_framework的分页组件的分析:我的讲解的思路是这样的,分别使用APIview的视图类和基于ModelViewSet的视图 ...
- Django的rest_framework的权限组件和频率组件源码分析
前言: Django的rest_framework一共有三大组件,分别为认证组件:perform_authentication,权限组件:check_permissions,频率组件:check_th ...
- Django的rest_framework认证组件之局部设置源码解析
前言: Django的rest_framework组件的功能很强大,今天来我来给大家剖析一下认证组件 下面进入正文分析,我们从视图开始,一步一步来剖析认证组件 1.进入urls文件 url(r'^lo ...
- Django的rest_framework的视图之基于ModelViewSet视图源码解析
前言 今天一直在整理Django的rest_framework的序列化组件,前面一共写了2篇博客,前面的博客给的方案都是一个中间的状态的博客,其中有很多的冗余的代码,如果有朋友不清楚,可以先看下我前面 ...
- django中的分页器组件
目录 django的组件-分页器 引入分页器 分页器demo 创建数据库模型 url控制器 views视图函数 templates模板 为什么要用分页器 导入分页器 分页器优化1 分页器优化2 有多少 ...
- Django 之 rest_framework 响应器使用
Django 之 rest_framework 响应器使用 使用部分: 第一步:导入模块 from rest_framework.renders import BrowsableAPIRenderer ...
- django的rest_framework框架源码剖析
在看源码之前先了解一下什么是rest,restful api. 什么是rest 可以总结为一句话:REST是所有Web应用都应该遵守的架构设计指导原则. REST是Representational S ...
- Django组件 之 分页器(paginator)
--------------------------------------------------------------------------------路虽远,行则将至. 事虽难,做则必成. ...
随机推荐
- 【字符串】 Z-algorithm
Z-algorithm Algorithm Task 给定一个文本串 \(S\) 和一个模式串 \(T\),求 \(T\) 对于 \(S\) 的每个后缀子串的公共前缀子串. Limitations 要 ...
- typora的使用技巧
目录 Typora 的 markdown 语法 标题: 插入图片: 链接: 字体变化: 删除: 文字高亮: 角标: 文本方位: :-:| :- | -: 制作表格: 常用快捷键(补充): 下划线: T ...
- Cookie、token、session的区别是什么?
背景: 最近在总结一些容易理解混淆的概念,之前面试的时候提到过,我觉得也说不清楚,这两天项目做接口测试发现用的cookie而不是之前的token,于是总结一下,便于以后用到的时候再阅读以及分享给需要的 ...
- GEO2R
GEO2R 是GEO数据库官方提供的一个工具,用于进行差异表达分析. 该工具实现的功能就是将GEO数据库中的数据导入到R语言中,然后进行差异分析,本质是通过以下两个bioconductor上的R包实现 ...
- rsync 使用方法 ssh免密问题 不同端口同步
不同端口同步(前提还是做好免密) 主要通过选项-e "ssh -p 端口"来实现 重命名了秘钥文件 指定-i即可~ 1. 本地目录同步到导地不同端口主机目录 [root@bakse ...
- 日志篇 随着win10更新...
随着win10更新到最新..我发现电脑出了点状况.. 一 是电脑睡眠主机不关闭...然后用了 https://jingyan.baidu.com/article/cb5d6105d76343005c2 ...
- jdk 1.7新特性
JDK1.7新特性 1,switch中可以使用字串了String s = "test"; switch (s) { case "test" : ...
- sqlcode与sqlerrm的区别
sqlCode:是数据库操作的返回码,其中0--成功:-1--失败:100--没有检索到数据. sqlerrm:是数返回指定错误代码的错误信息. 在一个内在的异常中,SQLCODE返回Oracle错误 ...
- shell三剑客之sed
背景 sed(Stream Editor 流编辑器),作为三剑客的一份子,主要的功能有增删改查.为什么称之为"流"编辑器呢?大家知道:在Linux文件系统中,一切都可以作为文件来处 ...
- nginx返回file not found原因
nginx返回file not found原因1 确实没有这个文件2 没有权限访问这个网站目录!!!