Django REST Framework提供了三种分页器:

  1. PageNumberPagination。基于Django Paginator封装,使得操作更方便,只需要做一些配置即可。分页方式:根据页数和每页的大小进行分页。
  2. LimitOffsetPagination。分页方式:从第几条开始找,向后找多少条。
  3. CursorPagination。实现比较复杂,有自己的特点。

说明:一般在分页前,需要先将数据排序。如果不排序,会报警告

PageNumberPagination

utils/pagination.py

from rest_framework.pagination import PageNumberPagination

class MyPagination(PageNumberPagination):
# 只需要做一些配置即可
page_size = 1 # 每页的数据量(默认)
page_query_param = "page" # 请求参数中的 page参数名
page_size_query_param = "size" # 请求参数中的 page_size参数名
max_page_size = 3 # 每页最大数量,请求参数中如果超过了这个配置,不会报错,会按照此配置工作 需要说明的是:我们配置的参数名,需要使用get请求。DRF在实现过程中只是针对get获取参数,如果需要其他方式传递参数(如post),需要自己修改源码。

views.py

from utils.pagination import MyPagination

class BookView(APIView):
def get(self, request):
book_list = Book.objects.all().order_by("id") # 实例化分页器对象
pageObj = MyPagination() # PageNumberPagination
# 调用分页方法
page_query = pageObj.paginate_queryset(book_list, request, view=self)
# 序列化器 many表示取出多条数据
ret = BookSeriallzer(page_query, myFields="__all__", many=True)
print(ret) resIO = pageObj.get_paginated_response(ret.data) # 获取分页的结果,将分页后的结果数据与Response封装在一起
# 将数据分为count,next,prev,result。分别是数据总量,上一页/下一页的请求地址,本页的数据 return resIO

LimitOffsetPagination

utils.pagination.py

class LimitPagination(LimitOffsetPagination):
'''需要我们规定:从第几条开始找,向后找多少条limit''' default_limit = 1 # 向后找几条的默认配置
limit_query_param = "limit" # 请求参数中的limit参数名
offset_query_param = "offset" # 请求参数中的offset参数名
max_limit = 3 # 最大的寻找条数 说明:参数的请求方法同上,get获取。

views.py

from utils.pagination import LimitPagination

class BookView(APIView):
def get(self, request):
book_list = Book.objects.all().order_by("id") # 实例化分页器对象
pageObj = LimitPagination() # LimitOffsetPagination
# 调用分页方法
page_query = pageObj.paginate_queryset(book_list, request, view=self)
# 序列化器 many表示取出多条数据
ret = BookSeriallzer(page_query, myFields="__all__", many=True)
print(ret) resIO = pageObj.get_paginated_response(ret.data) # 获取分页的结果,将分页后的结果数据与Response封装在一起
# 将数据分为count,next,prev,result。分别是数据总量,上一页/下一页的请求地址,本页的数据 return resIO

CursorPagination

游标分页。有时候,别人能够根据你的请求参数推断出你的数据库中有多少条数据,有些公司觉得这不够安全。使用次分页方式可以将游标进行加密,使人无法获知数据的数目。

特点:

  1. 分页前必须要排序
  2. 游标加密,不允许导航到任意位置(基于前两种的分页可以通过传参,对任意的页数发起请求,游标分页不允许),只能"next"和“prev”
  3. 支持非常大的数据集。如果表中有非常大的数据量,基于偏移的分页器效率变得很低,但基于游标分页的效率高。

utils/pagination.py

class CurPagination(CursorPagination):
'''游标分页'''
cursor_query_param = "cursor" # 游标请求参数,相当于page页数,但该数据是加密的,来自于上次分页返回
page_size = 2 # 默认每页显示的
ordering = "-id" # 排序 根据id倒序
max_page_size = 10 # 每页显示的最大条数

views.py

同上☝

Django REST Framework之分页器的更多相关文章

  1. DRF Django REST framework APIView(一)

    什么是REST? REST是一个标准,一种规范,遵循REST风格可以使开发的接口通用,便于调用者理解接口的作用. 使url更容易理解,让增删改清晰易懂,在前后端分离开发中按照这一规范能加快开发效率,减 ...

  2. 轻轻松松学会 DRF Django REST framework

    据我了解,目前的IT行业的大部分后端开发,都是需要进行前后端分离的,而前后端分类必不可少的是rest 规范,以下是django rest framework的学习路径: DRF Django REST ...

  3. django restful framework教程大全

    一. 什么是RESTful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角 ...

  4. Django REST Framework概述

    什么是REST REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”.这里说的表征性,就是指资源,通 ...

  5. [Django REST framework - 自动生成接口文档、分页]

    [Django REST framework - 自动生成接口文档.分页] 自动生成接口文档 # 后端人员写好接口,编写接口文档,给前端人员看,前端人员依照接口文档开发 # 公司里主流 -后端,使用w ...

  6. Django REST framework完全入门

    Django REST framework 一个强大灵活的Django工具包,提供了便捷的 REST API 开发框架 我们用传统的django也可以实现REST风格的api,但是顶不住Django ...

  7. 使用django rest framework

    django 刚接触,想做一些restful api , google了一下,发现有现成的框架.Django REST framework. 对使用做下记录: 安装 从http://django-re ...

  8. 利用 Django REST framework 编写 RESTful API

    利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...

  9. django rest framework 入门

    django rest framework 入门1-序列化 Serialization 分类: Python 2013-01-22 22:24 11528人阅读 评论(0) 收藏 举报 djangop ...

随机推荐

  1. apache tomcat 一个网站多域名的实现方法

    因此处是进行多域名设置,所以 Apache 与 tomcat的结合没有详述,此处只是设置多域名的方法 windows下 C:\WINDOWS\system32\drivers\etc 文件夹内 hos ...

  2. PAT甲级——A1080 Graduate Admission

    It is said that in 2011, there are about 100 graduate schools ready to proceed over 40,000 applicati ...

  3. RedHat服务器搭建Jenkins

  4. Deepin折腾手记之安装常用软件

    1. 创建快捷方式 在创建快捷图标的文件/usr/share/applications/xx.desktop 编辑内容 [Desktop Entry] Name=VNote X-Deepin-Vend ...

  5. spring boot 中 rabbit mq基础例子

    1.先安装ELANG,再按照RabbitMQ 2.打开RabbitMQ控制台:rabbit command prompt 1.设置elang的路径:set ERLANG_HOME=D:\work_pr ...

  6. org.apache.commons工具类方法解释 转

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...

  7. C#窗体随意移动

    //全区域移动 const int WM_NCLBUTTONDOWN = 0xA1; const int HT_CAPTION = 0x2; [DllImport("user32.dll&q ...

  8. C# 检测真实的文件类型函数

    private bool IsAllowedExtension(HttpPostedFile hifile) { bool ret = false; System.IO.FileStream fs = ...

  9. 最小费用最大流——EK+SPFA

    终于把最小费用最大流学会了啊-- 各种奇奇怪怪的解释我已经看多了,但在某些大佬的指点下,我终于会了. 原来是个好水的东西. 最小费用最大流是什么? 不可能不知道网络流吧?如果不知道,自行百度去-- 费 ...

  10. 【NOIP2013模拟联考7】OSU

    [NOIP2013模拟联考7]OSU 描述 Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分, ...