Django REST Framework之分页器
Django REST Framework提供了三种分页器:
- PageNumberPagination。基于Django Paginator封装,使得操作更方便,只需要做一些配置即可。分页方式:根据页数和每页的大小进行分页。
- LimitOffsetPagination。分页方式:从第几条开始找,向后找多少条。
- 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
游标分页。有时候,别人能够根据你的请求参数推断出你的数据库中有多少条数据,有些公司觉得这不够安全。使用次分页方式可以将游标进行加密,使人无法获知数据的数目。
特点:
- 分页前必须要排序
- 游标加密,不允许导航到任意位置(基于前两种的分页可以通过传参,对任意的页数发起请求,游标分页不允许),只能"next"和“prev”
- 支持非常大的数据集。如果表中有非常大的数据量,基于偏移的分页器效率变得很低,但基于游标分页的效率高。
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之分页器的更多相关文章
- DRF Django REST framework APIView(一)
什么是REST? REST是一个标准,一种规范,遵循REST风格可以使开发的接口通用,便于调用者理解接口的作用. 使url更容易理解,让增删改清晰易懂,在前后端分离开发中按照这一规范能加快开发效率,减 ...
- 轻轻松松学会 DRF Django REST framework
据我了解,目前的IT行业的大部分后端开发,都是需要进行前后端分离的,而前后端分类必不可少的是rest 规范,以下是django rest framework的学习路径: DRF Django REST ...
- django restful framework教程大全
一. 什么是RESTful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角 ...
- Django REST Framework概述
什么是REST REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”.这里说的表征性,就是指资源,通 ...
- [Django REST framework - 自动生成接口文档、分页]
[Django REST framework - 自动生成接口文档.分页] 自动生成接口文档 # 后端人员写好接口,编写接口文档,给前端人员看,前端人员依照接口文档开发 # 公司里主流 -后端,使用w ...
- Django REST framework完全入门
Django REST framework 一个强大灵活的Django工具包,提供了便捷的 REST API 开发框架 我们用传统的django也可以实现REST风格的api,但是顶不住Django ...
- 使用django rest framework
django 刚接触,想做一些restful api , google了一下,发现有现成的框架.Django REST framework. 对使用做下记录: 安装 从http://django-re ...
- 利用 Django REST framework 编写 RESTful API
利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...
- django rest framework 入门
django rest framework 入门1-序列化 Serialization 分类: Python 2013-01-22 22:24 11528人阅读 评论(0) 收藏 举报 djangop ...
随机推荐
- 带权二分图——KM算法hdu2255 poj3565
进阶指南的板子好像有点问题..交到hdu上会T 需要了解的一些概念: 交错树,顶标,修改量 #include<iostream> #include<stdio.h> #incl ...
- Intel RealSense Depth Camera D435安装ROS 驱动——Ubuntu16.04
官方教程 软件包下载链接 https://github.com/IntelRealSense/realsense-ros Download/Clone librealsense github repo ...
- 主机入侵防御系统(HIPS)分析
主机入侵防御系统(Host Intrusion Prevent System,HIPS)是近几年出现并迅速发展的新兴产物,与传统意义的防火墙和杀毒软件不同,它并不具备特征码扫描和主动杀毒等功能,所以想 ...
- IDEA中Git的使用(多人合作)
首先我们要简单知道github跟Git的区别.git是版本控制工具, github是一个面向开源及私有软件项目的托管平台,也是程序员交流的地方. 接下来就开始讲怎么多人一起开发. 首先我们先拥有git ...
- java流对象
Java和C++都是静态类型的面向对象编程语言 stream结尾都是字节流,reader和writer结尾都是字符流 区别: 就是读写的时候一个是按字节读写,一个是按字符. 实际使用通常差不多. 在读 ...
- java基础温习 -- 多态
1. 基本概念 多态是指一个事物有不同的表现形式或形态. 多态存在的三个必要条件:要有继承.要有重写.父类变量引用子类对象. 当使用多态方式调用方法时: 首先检查父类中是否有该方法,如 ...
- CAS(客户端)程序获取安全证书
以下是获取安全证书的一种方法,通过以下程序获取安全证书: import java.io.BufferedReader; import java.io.File; import java.io.File ...
- 深度学习(二十六)Network In Network学习笔记
深度学习(二十六)Network In Network学习笔记 Network In Network学习笔记 原文地址:http://blog.csdn.net/hjimce/article/deta ...
- 嘴巴题4 「BZOJ1827」[Usaco2010 Mar] gather 奶牛大集会
1827: [Usaco2010 Mar]gather 奶牛大集会 Description Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来 ...
- [转]C#设计模式(8)-Builder Pattern
一. 建造者(Builder)模式 建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象. 对象性质的建造 有些情况下,一个对象会有一些重 ...