You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为DRF可浏览API单独配置独立的PAGE_SIZE分页参数

解决方案

完全可以实现,只需要自定义一个能识别请求渲染器类型的分页类,替换全局默认分页配置即可,对现有业务逻辑零侵入。

具体实现步骤

  • 编写自定义分页类
    在你的项目公共模块(比如新建common/pagination.py文件)中写入以下代码:
from rest_framework.pagination import PageNumberPagination
from rest_framework.renderers import BrowsableAPIRenderer


class DualConfigPageNumberPagination(PageNumberPagination):
    # 常规API调用(程序请求JSON/XML等格式数据)使用的分页大小
    page_size = 10000
    # 可浏览API(浏览器访问可视化界面)专用分页大小
    browsable_page_size = 100

    def get_page_size(self, request):
        # 识别当前请求使用的渲染器,如果是可浏览API渲染器就返回专用分页值
        if isinstance(request.accepted_renderer, BrowsableAPIRenderer):
            return self.browsable_page_size
        return super().get_page_size(request)

这里的browsable_page_size你可以根据自己的页面加载需求调整数值,比如设为50、200都可以。

  • 修改全局配置替换默认分页类
    打开settings.py,修改REST_FRAMEWORK配置项,把原来的DEFAULT_PAGINATION_CLASS替换为你自定义的分页类路径,同时可以删掉原来写死的全局PAGE_SIZE参数:
REST_FRAMEWORK = {
    "DEFAULT_AUTHENTICATION_CLASSES": [
        "rest_framework.authentication.SessionAuthentication",
        "rest_framework.authentication.TokenAuthentication",
    ],
    "DEFAULT_FILTER_BACKENDS": ["django_filters.rest_framework.DjangoFilterBackend"],
    # 替换为你自定义的分页类路径,按实际存放位置调整
    "DEFAULT_PAGINATION_CLASS": "common.pagination.DualConfigPageNumberPagination",
}

补充说明

  • 这个方案不会影响你在单个视图/视图集上单独配置分页参数的逻辑,如果某个接口需要特殊分页大小,直接在视图类上设置page_size或者指定单独的paginator_class即可,优先级高于全局配置。
  • 判断逻辑基于DRF的渲染器匹配规则,只有当请求最终返回的是可浏览API的HTML页面时,才会启用小分页,所有程序调用API获取结构化数据的场景仍然会保持10000条的分页大小,完全不影响原有接口性能。
  • 如果你希望分页数值统一在settings里维护,也可以把两个分页大小的数值定义为settings常量,在分页类里通过django.conf.settings读取即可,后续调整更方便。

内容的提问来源于stack exchange,提问作者Cord Kaldemeyer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 13:27:18