REST framework之分页组件

一 简单分页

查看第n页,每页显示n条

  1. from rest_framework.pagination import PageNumberPagination
  2. # 一 基本使用:url=url=http://127.0.0.1:8000/pager/?page=2&size=3,size无效
  3. class Pager(APIView):
  4. def get(self,request,*args,**kwargs):
  5. # 获取所有数据
  6. ret=models.Book.objects.all()
  7. # 创建分页对象
  8. page=PageNumberPagination()
  9. # 在数据库中获取分页的数据
  10. page_list=page.paginate_queryset(ret,request,view=self)
  11. # 对分页进行序列化
  12. ser=BookSerializer1(instance=page_list,many=True)
  13. return Response(ser.data)
  14. # 二 自定制 url=http://127.0.0.1:8000/pager/?page=2&size=3
  15. # size=30,无效,最多5条
  16. class Mypage(PageNumberPagination):
  17. page_size = 2
  18. page_query_param = 'page'
  19. # 定制传参
  20. page_size_query_param = 'size'
  21. # 最大一页的数据
  22. max_page_size = 5
  23. class Pager(APIView):
  24. def get(self,request,*args,**kwargs):
  25. # 获取所有数据
  26. ret=models.Book.objects.all()
  27. # 创建分页对象
  28. page=Mypage()
  29. # 在数据库中获取分页的数据
  30. page_list=page.paginate_queryset(ret,request,view=self)
  31. # 对分页进行序列化
  32. ser=BookSerializer1(instance=page_list,many=True)
  33. # return Response(ser.data)
  34. # 这个也是返回Response对象,但是比基本的多了上一页,下一页,和总数据条数(了解即可)
  35. return page.get_paginated_response(ser.data)

setting里

  1. REST_FRAMEWORK = {
  2. # 每页显示两条
  3. 'PAGE_SIZE':2
  4. }

路由:

  1. url(r'^pager/$', views.Pager.as_view()),

Serializers

  1. class BookSerializer1(serializers.ModelSerializer):
  2. class Meta:
  3. model=models.Book
  4. # fields="__all__"
  5. exclude=('authors',)

二 偏移分页

在第n个位置,向后查看n条数据

  1. # http://127.0.0.1:8000/pager/?offset=4&limit=3
  2. from rest_framework.pagination import LimitOffsetPagination
  3. # 也可以自定制,同简单分页
  4. class Pager(APIView):
  5. def get(self,request,*args,**kwargs):
  6. # 获取所有数据
  7. ret=models.Book.objects.all()
  8. # 创建分页对象
  9. page=LimitOffsetPagination()
  10. # 在数据库中获取分页的数据
  11. page_list=page.paginate_queryset(ret,request,view=self)
  12. # 对分页进行序列化
  13. ser=BookSerializer1(instance=page_list,many=True)
  14. # return page.get_paginated_response(ser.data)
  15. return Response(ser.data)

三 CursorPagination

加密分页,只能看上一页和下一页,速度快

思考:不重写类,修改类属性?

  1. from rest_framework.pagination import CursorPagination
  2. # 看源码,是通过sql查询,大于id和小于id
  3. class Pager(APIView):
  4. def get(self,request,*args,**kwargs):
  5. # 获取所有数据
  6. ret=models.Book.objects.all()
  7. # 创建分页对象
  8. page=CursorPagination()
  9. page.ordering='nid'
  10. # 在数据库中获取分页的数据
  11. page_list=page.paginate_queryset(ret,request,view=self)
  12. # 对分页进行序列化
  13. ser=BookSerializer1(instance=page_list,many=True)
  14. # 可以避免页码被猜到
  15. return page.get_paginated_response(ser.data)

REST framework之分页组件的更多相关文章

  1. DRF 分页组件

    Django Rest Framework 分页组件 DRF的分页 为什么要使用分页 其实这个不说大家都知道,大家写项目的时候也是一定会用的, 我们数据库有几千万条数据,这些数据需要展示,我们不可能直 ...

  2. Django REST framework的分页

    DRF分页组件 为什么要使用分页 我们数据表中可能会有成千上万条数据,当我们访问某张表的所有数据时,我们不太可能需要一次把所有的数据都展示出来,因为数据量很大,对服务端的内存压力比较大还有就是网络传输 ...

  3. SNF快速开发平台MVC-瀑布式分页组件

    1.   瀑布式分页 目前已经比较流行了,以往的这种点击分页已经不能满足广大网民的需求了.像百度图片等等,网站都有滚动滚轮直接分页的功能,这样体验也确实好了不少,所以我们也决定在我们的框架内进行集成此 ...

  4. Django Rest framework 之 分页

    RESTful 规范 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest framework 之 节流(三) ...

  5. 电子商务系统的设计与实现(十):DWZ框架与第三方分页组件整合

    晚上,就是刚刚,在后端管理系统中使用DWZ框架. 先是,直接使用官网网站的Demo,dwz-jui,与编程语言无关的纯静态的那个原始项目. 很快就搭建好了左侧菜单,打开菜单后,出现Tab页面,然后显示 ...

  6. REST framework 之 分页

    DRF分页组件 为什么要使用分页 我们数据表中可能会有成千上万条数据,当我们访问某张表的所有数据时,我们不太可能需要一次把所有的数据都展示出来,因为数据量很大,对服务端的内存压力比较大还有就是网络传输 ...

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

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

  8. angular-ui分页组件

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

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

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

随机推荐

  1. BMP文件格式详解(BMP file format)

    BMP文件格式,又称为Bitmap(位图),或是DIB(Device-Independent Device,设备无关图),是windows系统中广泛使用的图片文件格式,由于它可以不作任何变换地址保存图 ...

  2. 记录一次SpringBoot实现AOP编程

    需求 最近碰到一个问题,需要对关键操作的入参和返回值进行记录,并不是使用log记录,而是插入到数据库中. 思路:如果采用硬编码,在每个操作后都添加,会产生大量重复代码.因而打算使用自定义注解,通过AO ...

  3. 【AtCoder】 ARC 102

    link C-Triangular Relationship 发现要么全部是\(K\)的倍数,要么全部是模\(K\)余\(K/2,(K=2n)\) #include<bits/stdc++.h& ...

  4. 通过phoenix导入数据到hbase出错记录

    解决方法1 错误如下 -- ::, [hconnection-0x7b9e01aa-shared--pool11069-t114734] WARN org.apache.hadoop.hbase.ip ...

  5. beforeDestroy的使用

    beforeDestroy ---实例销毁之前调用 需求是这样的: important:下面截图数据都是测试数据 日期在我点击查询的时候要存储,刷新就读内存,但是我点击其他页面再进来的时候,这个内存要 ...

  6. Tcl二进制数据

    binary format 格式化描述符 参数1 参数2...参数N binary scan 二进制数据 格式化描述符 变量1 变量2 ... 变量N 格式化描述符由两部分组成,第一是格式化类型关键字 ...

  7. python安装redis库

    pip install redis  没有相应的资源 可以到redisio上找到clients,  https://redis.io/clients 如下所示  下图中带黄五角星的为官方推荐的:  下 ...

  8. MyBatis中的配置错误creating bean with name 'sqlSessionFactory'

    错误信息如下: 警告: Exception encountered during context initialization - cancelling refresh attempt: org.sp ...

  9. 解读 | 你真正理解什么是Cloud Native吗?

    你能做到每周.每天甚至每个钟头向客户发布新特性吗?新加入的开发者能够在他们工作的第一天甚至面试阶段就能部署代码吗?部署新员工的代码后,你能因为确信应用程序运行正常而安然入睡吗?建立快速发布机制,包括支 ...

  10. TICK/TIGK运维栈安装运行 docker【中】

    InfluxDB docker search influxdb docker pull influxdb docker run -d -p 8086:8086 -v /var/lib/influxdb ...