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开始提取,所以最后提取的数据是test2
和test3
和test4
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


猜你喜欢
- 前言之前写过很多关于扫描脚本的文章,一直都没写自己的扫描IP段是哪里搞来的,也会有朋友经常来问一些扫描经验,说实话我觉得这个工具并没有实际的
- 01.简介当我们使用的鱼眼镜头视角大于160°时,OpenCV中用于校准镜头“经典”方法的效果可能就不是和理想了。即使我们仔细遵循OpenC
- 安装好所需要的插件和包:python、django、pip等版本如下:采用Django REST框架3.01、在python文件夹下D:\p
- Golang 高并发问题的解决Golang在高并发问题上,由于协程的使用,相对于其他编程语言,已经有了很大的优势,即相同的配置上,Golan
- 在oracle中有很多关于日期的函数,如:1、add_months()用于从一个日期值增加或减少一些月份 date_value:=add_m
- 目录一.准备工作二.预览1.启动2.运行3.结果三.设计思路四.源代码4.1 GUI.py4.2 Search_Apps.py五.总结一.准
- 这里我们在SQL Server 2005\SQL Server 2008版本上通过举例子,说明临时表和表变量两者的一些特征,让我们对临时表和
- 本文实例讲述了python读取json文件并将数据插入到mongodb的方法。分享给大家供大家参考。具体实现方法如下:#coding=utf
- 我是以Python开门的,我还是觉得Python也可以进行地形三维可视化,当然这里需要借助第三方库,so,我就来介绍:Python一个很重要
- 本文实例讲述了python异常处理用法。分享给大家供大家参考,具体如下:之前用Java的时候,在容易出错的地方我们经常使用try…catch
- 最近看到好多人说到tns或者数据库不能登录等问题,就索性总结了下面的文档。首先来说Oracle的网络结构,往复杂处说能加上加密、LDAP等等
- 之前就想要把自己的BlogsToWordpress打开成exe了。一直没去弄。又看到有人提到python打开成exe的问题。所以打算现在就去
- 原来sql还有个stuff的函数,很强悍。 一个列的格式是单引号后面跟着4位的数字,比如'0003,'0120,'4
- 又是一杯奶茶~事情的经过是这样的:又是奶茶,行吧行吧。快点开工,争取李大伟回来之前搞定。李大伟说是6位数字密码那么我们可以利用python生
- 本文给大家分享Python解释器安装以及PyCharm安装过程。很多朋友问小编要完整的安装教程,现分享给大家。一、Python解释器安装解释
- 一、总结说明Windows环境安装:paramunittest cmd输入命令:pip install paramunittest总结说明:
- 方法一通过斜率关系计算,公式如下图:需注意在求斜率时不要出现竖直情况,python计算会报错,但按理说应该可以计算出无穷的,此处先放这吧,等
- 本文实例讲述了php计算给定日期所在周的开始日期和结束日期。分享给大家供大家参考,具体如下:<?php/** * 取得给定日期所在周的
- 之前对bottle做过不少的介绍,也写过一些文章来说明bottle的缺点,最近发现其实之前有些地方说的不太公平,所以趁此机会也来更正一下。&
- 本文主要介绍go语言静态库的编译和使用方法,以windows平台为例,linux平台步骤一样,具体环境如下:>echo %GOPATH