Django drf分页器的使用详解

作者:Silent丿丶黑羽 时间:2022-04-09 08:23:35 

前言

当后台返回的数据过多时,我们就要配置分页器,比如一页最多只能展示10条等等,drf中默认配置了3个分页面

  • PageNumberPagination:基础分页器,性能略差

  • LimitOffsetPagination:偏移分页器

  • CursorPagination:游标分页器,性能强大

PageNumberPagination

基础分页器PageNumberPagination,数据量越大性能越差。

首先我们在app中创建一个pagination.py文件,然后自定义一个分页器类,继承自PageNumberPagination


from rest_framework.pagination import PageNumberPagination
class MyPageNumberPagination(PageNumberPagination):
   """
   普通分页,数据量越大性能越差
   """
   # 默认页面展示的条数
   page_size = 3
   # 前端访问url需要添加 ?page=页码
   page_query_param = 'page'
   # 用户自定义返回的条数,格式?page_size=页数
   page_size_query_param = "page_size"
   # 用户自定义返回的条数最大限制,数值超过5也只展示5条
   max_page_size = 5

如果我们需要局部配置则在类视图中访问使用pagination_class = MyPageNumberPagination即可
如果是全局配置,则在settings.py文件中配置如下:


REST_FRAMEWORK = {
   'DEFAULT_PAGINATION_CLASS': 'api.pagination.MyPageNumberPagination',
}

之后我们访问url只需在后面加入?page=页码数即可
比如http://127.0.0.1:8000/api/cars/?page=2,代表访问第二页的数据,数据的条数默认为page_size的值
比如http://127.0.0.1:8000/api/cars/?page=2&page_size=5,代表访问第二页的数据,用户自定义返回的条数为5条

LimitOffsetPagination

首先我们自定义一个分页器类,继承自LimitOffsetPagination


class MyLimitOffsetPagination(LimitOffsetPagination):
   # url后面跟limit请求参数,
   limit_query_param = 'limit'
   # url后面跟offset请求参数
   offset_query_param = 'offset'
   # 最大限制20条
   max_limit = 20
   # 默认限制3条
   default_limit = 3

之后我们访问url只需要在后面加入?limit=10即可
比如http://127.0.0.1/api/cars/?limit=10代表访问的数据最多展示10条,如果你limit的值>max_limit,那么还是按照max_limit的值来展示数据的条数
比如http://127.0.0.1/api/cars/?offset=1,这里没有limit参数,所以默认展示3条,offset=1代表从数据库列表中提取数据的时候,是从下标1开始提取,比如提取的数据列表是['test1', 'test2', 'test3', 'test4'],本来我们默认提取前3条,但是你加上offset=1后,他是从列表下标为1开始提取,所以最后提取的数据是test2test3test4

CursorPagination

游标分页器跟基础分页器用法差不多,只是游标分页的针对下一页数据的url进行了加密
首先我们自定义一个分页器类,继承自CursorPagination


class MyCursorPagination(CursorPagination):
   """
   Cursor 光标分页 性能高,安全
   """
   page_size = 10
   page_size_query_param = "page_size"
   max_page_size = 20
   ordering = '-price'

如果我们视图中使用了排序过滤filter_backends = [OrderingFilter],那么我们在访问url的时候必须携带参数?ordering=需要排序的字段

来源:https://www.cnblogs.com/jiakecong/p/14917606.html

标签:Django,drf,分页器
0
投稿

猜你喜欢

  • Python torch.flatten()函数案例详解

    2022-11-11 16:04:27
  • oracle学习笔记(二)

    2012-01-05 18:59:20
  • 基于Python实现拆分和合并GIF动态图

    2021-09-09 18:05:57
  • python语言基本语句用法总结

    2023-07-03 01:26:34
  • Python使用docx模块处理word文档流程详解

    2023-03-08 15:45:06
  • Python的Flask框架中实现简单的登录功能的教程

    2023-10-26 19:18:48
  • python图像处理入门(一)

    2023-10-28 20:47:38
  • MySQL 连接与管理

    2011-09-10 15:52:42
  • python技巧分享Excel创建和修改

    2022-01-09 12:04:59
  • Python还能这么玩之用Python修改了班花的开机密码

    2023-11-23 17:38:40
  • python 定时任务去检测服务器端口是否通的实例

    2021-05-18 15:09:13
  • Linux服务器上安装Python3的两种方式

    2022-01-23 12:13:39
  • 详解python中的三种命令行模块(sys.argv,argparse,click)

    2021-04-24 12:57:10
  • Alexa排名数据xml接口及其参数说明

    2008-11-07 13:03:00
  • python地震数据可视化详解

    2021-05-14 15:41:52
  • Python逐行读取文件中内容的简单方法

    2023-03-02 16:01:09
  • python 边缘扩充方式的实现示例

    2021-03-30 23:28:17
  • Django ORM 查询管理器源码解析

    2023-01-30 12:28:47
  • python pandas 时间日期的处理实现

    2021-09-05 02:38:07
  • phpstorm断点调试方法图文详解

    2023-05-30 01:06:40
  • asp之家 网络编程 m.aspxhome.com