一、分页组件

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 分页组件、响应器的更多相关文章

  1. rest-framework框架——解析器、ur控制、分页、响应器、渲染器、版本

    一.解析器(parser) 解析器在reqest.data取值的时候才执行. 对请求的数据进行解析:是针对请求体进行解析的.表示服务器可以解析的数据格式的种类. from rest_framework ...

  2. DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

  3. day91 DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

  4. day 89 DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

  5. 基于Vue.js的表格分页组件

    有一段时间没更新文章了,主要是因为自己一直在忙着学习新的东西而忘记分享了,实在惭愧. 这不,大半夜发文更一篇文章,分享一个自己编写的一个Vue的小组件,名叫BootPage. 不了解Vue.js的童鞋 ...

  6. angular-ui分页组件

    http://angular-ui.github.io/bootstrap/#/pagination 分页组件只提供生成分页按钮,数据的显示需要使用ng-repeat, 注意设置 items-per- ...

  7. asp.net mvc4+mysql做一个简单分页组件(部分视图)

    在开始做mysql分页功能组件前,便设定的是要有一定可复用性.先在项目里Views文件夹下右键新建名为_PaginationComponent.cshtml,这里html及css我采用的bootstr ...

  8. ReactJS实现的通用分页组件

    大家多少都自己写过各种版本的分页工具条吧,像纯服务版的,纯jsWeb板的,Angular版的,因为这个基础得不能再基础的功能太多地方都会用到,下面我给出以个用ReactJS实现的版本,首先上图看下效果 ...

  9. 基于vue2.0的分页组件开发

    今天安排的任务是写基于vue2.0的分页组件,好吧,我一开始是觉得超级简单的,但是越写越写不出来,写的最后乱七八糟的都不知道下句该写什么了,所以重新捋了思路,小结一下- 首先写组件需要考虑: 要从父组 ...

随机推荐

  1. java Eclipse的使用技巧

    eclipse与myeclipse的关系(都属于java开发的工具): 后者是前者的一个插件,后来为了方便使用,myeclipse集合了eclipse,后者是收费的. 可大部分人都是用 eclipse ...

  2. 2018.11.2浪在ACM集训队第三次测试赛

    2018.11.2 浪在ACM 集训队第三次测试赛 整理人:孔晓霞 A 珠心算测试 参考博客:[1]李继朋  B 比例简化 参考博客: [1]李继朋 C 螺旋矩阵 参考博客:[1]朱远迪 D 子矩阵 ...

  3. sort排序,按指定字段进去重,sort -t "^" -k 8 -su,ls给文件名中数字排序sort -k1.5n,Tab符要转义

    sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语法 ...

  4. ZR提高失恋测2(9.7)

    ZR提高失恋测2(9.7) 网址http://www.zhengruioi.com/contest/392 版权原因,不放题面 A 首先,我们发现对于匹配串\(s\)中所有满足\(s_i \not = ...

  5. SDOI2019热闹又尴尬的聚会

    P5361 [SDOI2019]热闹又尴尬的聚会 出题人用脚造数据系列 只要将\(p\)最大的只求出来,\(q\)直接随便rand就能过 真的是 我们说说怎么求最大的\(p\),这个玩意具有很明显的单 ...

  6. React父组件调用子组件的方法

    16.3.0之前的设置方法为 var HelloMessage = React.createClass({ childMethod: function(){ alert("组件之间通信成功& ...

  7. <Catalan>杨辉三角实现卡特兰数计算方法

    h(n)=C(2n,n)-C(2n,n-1) #include<cstdio> #define siz 20 using namespace std; int n; ][siz]; int ...

  8. 判断移动端还是PC端

    window.onload=function(){ var sUserAgent = navigator.userAgent.toLowerCase(); var bIsIpad = sUserAge ...

  9. 【一起学源码-微服务】Nexflix Eureka 源码九:服务续约源码分析

    前言 前情回顾 上一讲 我们讲解了服务发现的相关逻辑,所谓服务发现 其实就是注册表抓取,服务实例默认每隔30s去注册中心抓取一下注册表增量数据,然后合并本地注册表数据,最后有个hash对比的操作. 本 ...

  10. 20191024-3 互评Alpha阶段作品

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9860 本组对构建之法组评价的博客链接:https://www.cnblog ...