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
相关产品推荐
相关产品推荐

