Django DRF 三种分页器配置与使用详解

追风的人
追风的人
发布时间:2026-10-14| 7人浏览过
原创

本文详细介绍 Django REST Framework 中三种分页器的配置与使用。涵盖基础分页 PageNumberPagination 的全局与局部配置、偏移分页 LimitOffsetPagination 的 limit 与 offset 参数逻辑,以及高性能游标分页 CursorPagination 的安全性与排序要求。包含完整代码示例及 URL 调用方式,帮助开发者根据数据量与性能需求选择合适的分页策略。

前言

当后端返回的数据量过大时,必须引入分页机制以优化性能,例如限制每页仅展示 10 条记录。在 drf 框架中,默认提供了三种分页器供开发者选择。

  • 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 时只需在 URL 后追加 ?page=页码数 参数即可。 例如访问 http://127.0.0.1:8000/api/cars/?page=2,表示获取第 2 页的数据,默认每页显示条数由 page_size 参数决定。 又如访问 http://127.0.0.1:8000/api/cars/?page=2&page_size=5,表示获取第 2 页数据,且用户自定义每页显示 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 时,只需在 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 参数用于指定从数据库列表中提取数据的起始下标。假设原始数据列表为 ['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=需要排序的字段 参数,否则可能导致分页结果不一致。

以上即为 Django DRF 中三种分页器的详细配置与使用指南,更多关于 Django DRF 分页器的技术资料,敬请关注本站后续文章。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。