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

引入Djoser路由与Swagger共存时触发类型错误

解决Djoser集成后Swagger文档报错的问题

我之前碰到过一模一样的情况,大概率是Djoser的路由和Swagger的自动文档生成逻辑冲突了,尤其是Djoser自带的部分视图没被Swagger正确识别,或者权限配置出了问题。给你几个可行的解决思路:

1. 让Swagger只扫描你的业务路由,排除Djoser

Swagger默认会遍历所有urlpatterns生成文档,Djoser的一些内部路由(比如密码重置、用户激活)可能会干扰文档生成。你可以在Swagger的配置里指定只扫描自己的API路由:

如果用的是旧版django-rest-swagger:

from rest_framework_swagger.views import get_swagger_view
from django.urls import path, include

# 只包含你的业务API路由,排除Djoser的路由
schema_view = get_swagger_view(
    title='API Documentation',
    patterns=[
        path('api/', include('your_app.urls')),  # 替换成你的业务路由
    ]
)

如果用的是新版的drf-yasg(更推荐的Swagger工具):

from drf_yasg.views import get_schema_view
from drf_yasg import openapi
from django.urls import url, include

schema_view = get_schema_view(
   openapi.Info(
      title="API Documentation",
      default_version='v1',
   ),
   public=True,
   # 过滤掉Djoser的路由,只处理业务API
   patterns=[url(r'^api/', include('your_app.urls'))],
)

2. 配置Swagger识别Djoser的视图(如果需要包含Djoser接口到文档)

如果你想把Djoser的API也放进Swagger文档,需要确保Swagger能正确识别它的视图。可以在settings.py里添加全局配置:

SWAGGER_SETTINGS = {
    'SECURITY_DEFINITIONS': {
        'Bearer': {
            'type': 'apiKey',
            'name': 'Authorization',
            'in': 'header'
        }
    },
    'USE_SESSION_AUTH': False,  # 禁用会话认证,适配Djoser的Token/JWT认证
    'JSON_EDITOR': True,
}

同时确保Djoser的路由配置正确,别搞反顺序:

# urls.py
from django.urls import path, include

urlpatterns = [
    path('docs/', schema_view),
    # 正确添加Djoser的路由
    path('auth/', include('djoser.urls')),
    path('auth/', include('djoser.urls.jwt')),  # 用JWT的话加上这行
    # 你的业务路由
    path('api/', include('your_app.urls')),
]

3. 豁免Swagger视图的权限

有时候Swagger访问Djoser视图时会触发权限校验,导致报错。你可以给Swagger视图设置允许所有访问:

from rest_framework.permissions import AllowAny

# 针对django-rest-swagger
schema_view = get_swagger_view(
    title='API Documentation',
    permission_classes=[AllowAny],
)

# 针对drf-yasg
schema_view = get_schema_view(
   openapi.Info(
      title="API Documentation",
      default_version='v1',
   ),
   public=True,
   permission_classes=[AllowAny],
)

4. 查看完整报错栈定位具体问题

你提供的报错信息不完整,建议看一下报错栈的最后一行,比如是不是某个视图没有schema属性,或者权限类抛出了异常。比如常见的是Djoser的某些视图没配置权限类,Swagger生成文档时无法解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:51:40