restframework 分页组件、响应器
一、分页组件
1、PageNumberPagination
a、全局配置
导入模块
from rest_framework.pagination import PageNumberPagination
在视图类中配置
def get(self, request):
# 注意:数据quweyset
book_list = Book.objects.get_queryset().order_by('pk')
# 实例化
pnp = PageNumberPagination()
# 调用方法
pnp_list = pnp.paginate_queryset(book_list, request, self)
book_serialize = BookModelSerialize(pnp_list, many=True, context={'request': request})
return Response(book_serialize.data)
在配置文件中,修改全局page_size
REST_FRAMEWORK = {
'PAGE_SIZE': 1,
}
注意:queryset,book_list
b、局部分页
自定义分页类,继承PageNumberPagination
class MyPageNumberPagination(PageNumberPagination):
page_size = 1
page_query_param = 'page'
# 临时分页的参数 size=当前页面显示的数量
page_size_query_param = 'size'
# 临时分页size的最大值
max_page_size = 3
视图类
class BookView(APIView):
# parser_classes = [JSONParser]
# 查看书籍, 返回所有数据(书籍信息)
def get(self, request):
# 获取book的所有数据
book_list = Book.objects.get_queryset().order_by('pk')
# 实例化对象
pnp = MyPageNumberPagination()
pnp_list = pnp.paginate_queryset(book_list, request, self)
book_serialize = BookModelSerialize(pnp_list, many=True)
return Response(book_serialize.data)
2、LimitOffsetPagination
导入模块
from rest_framework.pagination import LimitOffsetPagination
a、全局设置和上面相似,具体看源码
b、局部设置
分页类
class MyLimitOffsetPagination(LimitOffsetPagination):
default_limit = 1
# limit 分页 limit=n ,一页有n条数据
limit_query_param = 'limit'
# offset 偏移的数据量 offset=n,从第n条数据开始分页
offset_query_param = 'offset'
视图类
class BookView(APIView):
# parser_classes = [JSONParser]
# 查看书籍, 返回所有数据(书籍信息)
def get(self, request):
# 获取book的所有数据
book_list = Book.objects.get_queryset().order_by('pk')
# 实例化对象
pnp = MyLimitOffsetPagination()
pnp_list = pnp.paginate_queryset(book_list, request, self)
book_serialize = BookModelSerialize(pnp_list, many=True)
return Response(book_serialize.data)
注意:limit是每页的数据量,offset是从第几条数据开始分页,不包含此条数据
3、终极视图组件分页
a、局部
注意:认证、权限可以有多个,分页器只能有一个
class AuthorViewSet(viewsets.ModelViewSet):
# permission_classes = [PermissionSet]
# authentication_classes = [ModelToken]
pagination_class = MyLimitOffsetPagination
queryset = Author.objects.all()
serializer_class = AuthorModelSerializer
b、全局
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'app01.components.Pagination.MyPageNumberPagination'
}
设置局部无分页
pagination_class = PageNumberPagination

源码解析
ModelViewSet -> mixins.ListModelMixin -> paginate_queryset ModelViewSet => GenericViewSet -> generics.GenericAPIView -> paginate_queryset -> paginator -> pagination_class() -> api_settings.DEFAULT_PAGINATION_CLASS
3.CursorPagination (加密分页)
分页器
class MyCursorPagination(CursorPagination):
cursor_query_param = 'cursor'
page_size = 1
ordering = '-id' # 重写要排序的字段
视图
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)
二、相应器
restframework 自定义的
from rest_framework.response import Response
注意:在浏览器和postman显示数据的格式不一样
restframework 分页组件、响应器的更多相关文章
- rest-framework框架——解析器、ur控制、分页、响应器、渲染器、版本
一.解析器(parser) 解析器在reqest.data取值的时候才执行. 对请求的数据进行解析:是针对请求体进行解析的.表示服务器可以解析的数据格式的种类. from rest_framework ...
- DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件
DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件 本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...
- day91 DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件
DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件 本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...
- day 89 DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件
DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件 本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...
- 基于Vue.js的表格分页组件
有一段时间没更新文章了,主要是因为自己一直在忙着学习新的东西而忘记分享了,实在惭愧. 这不,大半夜发文更一篇文章,分享一个自己编写的一个Vue的小组件,名叫BootPage. 不了解Vue.js的童鞋 ...
- angular-ui分页组件
http://angular-ui.github.io/bootstrap/#/pagination 分页组件只提供生成分页按钮,数据的显示需要使用ng-repeat, 注意设置 items-per- ...
- asp.net mvc4+mysql做一个简单分页组件(部分视图)
在开始做mysql分页功能组件前,便设定的是要有一定可复用性.先在项目里Views文件夹下右键新建名为_PaginationComponent.cshtml,这里html及css我采用的bootstr ...
- ReactJS实现的通用分页组件
大家多少都自己写过各种版本的分页工具条吧,像纯服务版的,纯jsWeb板的,Angular版的,因为这个基础得不能再基础的功能太多地方都会用到,下面我给出以个用ReactJS实现的版本,首先上图看下效果 ...
- 基于vue2.0的分页组件开发
今天安排的任务是写基于vue2.0的分页组件,好吧,我一开始是觉得超级简单的,但是越写越写不出来,写的最后乱七八糟的都不知道下句该写什么了,所以重新捋了思路,小结一下- 首先写组件需要考虑: 要从父组 ...
随机推荐
- PHP mysqli扩展整理,包括面向过程和面向对象的比较\事务控制\批量执行\预处理
相关文章:PHP的mysql扩展整理,操作数据库的实现过程分析 PHP PDO扩展整理,包括环境配置\基本增删改查\事务\预处理 介绍 mysqli是PHP程序与mysql数据库进行数据交互的桥梁, ...
- linux进程互斥等待
我们已经见到当一个进程调用 wake_up 在等待队列上, 所有的在这个队列上等待的进程 被置为可运行的. 在许多情况下, 这是正确的做法. 但是, 在别的情况下, 可能提前知道 只有一个被唤醒的进程 ...
- 多校 HDU - 6614 AND Minimum Spanning Tree (二进制)
传送门 AND Minimum Spanning Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 ...
- BIO、NIO、AIO 个人总结
BIO(blocking io) BIO即为阻塞IO,在网络编程中,它会在建立连接和等待连接的对端准备数据阶段进行阻塞.因此为了支撑高并发的用户访问,一般会为每一个socket 连接分配一个线程.但使 ...
- JavaScript DOM事件对象的两个小练习 | 学习内容分享
Event 对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 事件通常与函数结合使用,函数不会在事件发生前被执行! 本文用于记录个人学习过程 ...
- Web基础了解版10-Filter-Listener
Filter 对于WEB应用来说,过滤器是一个驻留在服务器中的WEB组件,他可以截取客户端和WEB资源之间的请求和响应信息. 在一个WEB应用中可以部署多个过滤器,多个过滤器就组成了一个过滤器链,请求 ...
- DOCKER学习_005:Flannel网络配置
一 简介 Flannel是一种基于overlay网络的跨主机容器网络解决方案,也就是将TCP数据包封装在另一种网络包里面进行路由转发和通信, Flannel是CoreOS开发,专门用于docker多机 ...
- 【题解】Uoj#30 Tourist(广义圆方树+树上全家桶)
[题解]Uoj#30 Tourist(广义圆方树+树上全家桶) 名字听起来很霸气其实算法很简单.... 仙人掌上的普通圆方树是普及题,但是广义圆方树虽然很直观但是有很多地方值得深思 说一下算法的流程: ...
- 【题解】CTSC1999家园(网络流)
CTSC1999家园 建模方法类似我NOI2019网络同步赛我的T1写法[[题解]NOI2019Route](70分) 问题的焦点是:空间时间载具. 考虑如何击破时间限制,可以对每个点关于每个时刻建立 ...
- 洛谷$P$1486 郁闷的出纳员 $[NOI2004]$ $splay$
正解:$splay$ 解题报告: 传送门! 依然先考虑要呲呲些什么操作鸭$QwQ$ 其实就只要一个删除区间,一个查询第$k$大,还一个插入就欧克? 删除区间的话直接旋转下根什么的然后直接把子树删了就好 ...