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. Django REST Framework之分页器

    Django REST Framework提供了三种分页器: PageNumberPagination.基于Django Paginator封装,使得操作更方便,只需要做一些配置即可.分页方式:根据页 ...

  2. windows类书的学习心得

    原文网址:http://www.blogjava.net/sound/archive/2008/08/21/40499.html 现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千 ...

  3. DRF Django REST framework 之 频率,响应器与分页器组件(六)

    频率组件 频率组件类似于权限组件,它判断是否给予请求通过.频率指示临时状态,并用于控制客户端可以向API发出的请求的速率. 与权限一样,可以使用多个调节器.API可能会对未经身份验证的请求进行限制,而 ...

  4. Restful framework【第九篇】分页器

    基本使用 分页 -简单分页 page_size = api_settings.PAGE_SIZE :每页显示条数 page_query_param = 'page' :查询的页码数 page_size ...

  5. Django Rest Framework(二)

    •基于Django 先创建一个django项目,在项目中创建一些表,用来测试rest framework的各种组件 models.py class UserInfo(models.Model): &q ...

  6. Django REST framework基础:分页

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

  7. rest framework 视图,路由

    视图 在上面序列化的组件种已经用到了视图组件,即在视图函数部分进行逻辑操作. 但是很明显的弊端是,对每个表的增删改查加上 单条数据,需要用到 2个类 5个方法(增删改查,单数据查)才可以完整的实现,当 ...

  8. 05 Django REST Framework 分页

    01-分页模式 rest framework中提供了三种分页模式: from rest_framework.pagination import PageNumberPagination, LimitO ...

  9. Laravel 中通过自定义分页器分页方法实现伪静态分页链接以利于 SEO

    我们知道,Laravel 自带的分页器方法包含 simplePaginate 和 paginate 方法,一个返回不带页码的分页链接,另一个返回带页码的分页链接,但是这两种分页链接页码都是以带问号的动 ...

  10. Django REST framework的分页

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

随机推荐

  1. mongdb使用

    下载mongodb数据库  https://www.mongodb.com/ 根据自己的电脑系统下载相应的版本 安装并且打开你下载的数据库 打开数据库bin文件夹:          cd soft/ ...

  2. bzoj3277

    题解: 后缀自动机 然后抄了一发题解 可以看看这个博客:http://blog.csdn.net/clover_hxy/article/details/53861268 代码: #include< ...

  3. 运算类实现 及 GNU Makefile基本结构

    1.运算类的实现,代码如下:  (1)operator.cpp #include<iostream> #include "operator.h" using names ...

  4. jdk8-lanbda方法引用和构造引用

    1.方法引用概念及实例 1.对象实例方法 语法格式: 对象::实例方法名称 注意点: 实例方法必须和被实现的接口中定义的方法的参数列表和返回值一致.一般适合于一个方法就实现了的. 2.类::静态方法 ...

  5. DevExpress WinForms v18.2新版亮点(四)

    行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress WinForms v1 ...

  6. JS日期工具类(转)

    javascript Date format(js日期格式化) https://www.cnblogs.com/zhangpengshou/archive/2012/07/19/2599053.htm ...

  7. Mvc Api 自定义路由

    // [RoutePrefix("api/ssm")]// public class ValuesController : ApiController// {// ///<s ...

  8. ipython output logging:使用日志记录输出

    通常使用ipython的%logstart日志功能时,仅开启输入的记录. 例如在ipython中开启%logstart后,记录的日志文件内容如下: #!/usr/bin/env python # 20 ...

  9. Python MRO_C3

    class A: pass class B(A): pass class C(A): pass class D(B, C): pass class E(C, A): pass class F(D, E ...

  10. 分析攻击IP来源地并画出饼图

    此文中的API将台湾列为国家,非本人立场,台湾属于中国,台湾岛生活的人不一定! 上码: #!/usr/bin/python #coding=utf-8 ''' http://ip-api.com/js ...