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

使用django-split-settings与drf-spectacular时Swagger访问报AssertionError

解决django-split-settings与drf-spectacular整合的AssertionError问题

核心原因

这个错误本质是DRF的DEFAULT_SCHEMA_CLASS未正确设置为drf-spectacular的AutoSchema,大概率是拆分配置加载时出现遗漏或覆盖问题。

排查与修复步骤

1. 确认settings/init.py的加载顺序

确保drf.py被正确包含在配置加载列表中,且加载顺序不会让其他配置覆盖它的REST_FRAMEWORK设置。

示例__init__.py正确写法:

import os
from split_settings.tools import include

include(
    # 先加载基础配置(若有)
    'components/base.py',
    # 加载DRF核心配置,确保优先级高于环境配置
    'components/drf.py',
    # 环境配置放在最后,避免覆盖核心DRF设置
    'environments/{}.py'.format(os.environ.get('DJANGO_ENV', 'development')),
)

2. 验证drf.py的配置语法

检查drf.py中REST_FRAMEWORK的配置无语法错误:

REST_FRAMEWORK = {
    'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
    # 其他DRF配置项...
}

3. 验证配置是否实际生效

在项目根目录运行Django Shell,检查当前配置值:

python manage.py shell

执行以下代码确认配置:

from django.conf import settings
print(settings.REST_FRAMEWORK.get('DEFAULT_SCHEMA_CLASS'))

若输出不是drf_spectacular.openapi.AutoSchema,说明配置未加载成功,回到步骤1检查include路径和顺序。

4. 避免环境配置覆盖DRF设置

如果environments/下的配置文件(如development.py)也定义了REST_FRAMEWORK,会覆盖drf.py的设置。需用字典更新方式保留原有配置:

# environments/development.py
from django.conf import settings

REST_FRAMEWORK = {
    **settings.REST_FRAMEWORK,
    # 仅添加/修改当前环境专属的DRF配置
    'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler',
}

5. 强制指定SpectacularAPIView的schema_class

若上述方法无效,可直接在urls.py中为视图指定schema_class,绕过全局配置问题:

# urls.py
from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView
from drf_spectacular.openapi import AutoSchema

urlpatterns = [
    path('api/schema/', SpectacularAPIView.as_view(schema_class=AutoSchema), name='schema'),
    path('api/schema/swagger-ui/', SpectacularSwaggerView.as_view(url_name='schema'), name='swagger-ui'),
    # 其他路由...
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:02:45