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

Django drf-spectacular如何排除指定路径,仅暴露api/v3版本接口?

drf-spectacular 仅暴露指定版本API端点的实现方法

有两种成熟的实现方案可以满足需求,可根据你的项目结构选择:


方案1:使用预处理钩子过滤路径(推荐,适配绝大多数场景)

drf-spectacular 提供了PREPROCESSING_HOOKS配置项,可在生成接口 schema 前过滤不需要的端点:

  • 首先自定义路径过滤函数,可放在项目的settings.py或公共工具文件中:
def filter_v3_only_endpoints(endpoints, **kwargs):
    # 仅保留前缀为/api/v3/的路径
    return [
        (path, path_regex, method, callback) 
        for path, path_regex, method, callback in endpoints
        if path.startswith("/api/v3/")
    ]
  • 在settings.py的SPECTACULAR_SETTINGS中注册该钩子:
SPECTACULAR_SETTINGS = {
    # 保留你原有的其他配置,比如TITLE、VERSION等
    "PREPROCESSING_HOOKS": [
        "your_project_name.settings.filter_v3_only_endpoints" # 替换为实际的函数导入路径
    ]
}

方案2:指定专属urlconf生成文档

如果你的不同版本API已经拆分了独立的url配置,可直接给文档视图指定仅包含v3版本的urlconf:

  • 先创建仅包含v3 API路径的独立url配置文件,例如urls_v3.py,内部只注册api/v3相关的路由
  • 在总urls.py中配置Swagger视图时传入自定义urlconf:
from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView
from . import urls_v3

urlpatterns = [
    # 保留原有其他路由配置
    path("api/schema/", SpectacularAPIView.as_view(urlconf=urls_v3), name="schema"),
    path("api/docs/", SpectacularSwaggerView.as_view(url_name="schema"), name="swagger_ui"),
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:06:01