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

如何使用drf-yasg生成第三方Django应用的Swagger接口端点

问题

是否有方法可以使用drf-yasg生成所有第三方Django应用的接口端点?
已安装social_django应用,需要将其提供的所有URL纳入Swagger UI展示,包括/login/facebook/、/login/google-oauth2/等第三方登录路径,以及Django自带的/admin/等内置路径。
当前Swagger UI仅能展示自定义开发的接口,无法识别上述第三方应用及Django内置路由对应的端点。

现有urlpatterns配置

urlpatterns = [
    re_path('admin/', admin.site.urls),
    re_path('', include('user.urls')),
    re_path(r'^$', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
    re_path(r'', include('social_django.urls', namespace='social')),
    re_path(r'accounts/', include('django.contrib.auth.urls')),
]

现有Schema配置

schema_view = get_schema_view(
    openapi.Info(
        title="Snippets API",
        default_version='v1',
        description="Test description",
        terms_of_service="https://www.google.com/policies/terms/",
        contact=openapi.Contact(email="contact@snippets.local"),
        license=openapi.License(name="BSD License"),
    ),
    public=True,
    permission_classes=(permissions.AllowAny,),
)

效果参考

swagger端点展示截图


解决方法

drf-yasg默认只会自动扫描识别基于Django REST Framework规范实现的接口(继承自APIView、ViewSet的视图),social_django、Django内置auth、admin模块的视图都是普通Django视图,不满足DRF视图规范,所以不会被自动收录到OpenAPI文档中,可按以下方式处理:

  • 手动给需要展示的非DRF视图添加swagger声明
    使用swagger_auto_schema装饰器给第三方视图、内置视图补充接口描述、参数、响应等元信息,示例:
    from drf_yasg.utils import swagger_auto_schema
    from social_django.views import auth, complete
    
    # 第三方登录跳转入口
    social_auth = swagger_auto_schema(
        method='get',
        operation_description='第三方登录跳转入口,适配facebook、google-oauth2等登录渠道',
        tags=['第三方登录']
    )(auth)
    
    # 第三方登录授权回调
    social_complete = swagger_auto_schema(
        method='get',
        operation_description='第三方平台授权完成后的回调接口',
        tags=['第三方登录']
    )(complete)
    
  • 调整路由引用,不要直接全量include第三方路由
    原配置中直接include('social_django.urls')的方式会让drf-yasg无法识别视图对应的元信息,可以手动声明需要展示的路由,替换原有全量引入的配置。
  • 明确指定schema扫描的路由范围
    在get_schema_view中传入patterns参数,指定所有需要纳入扫描的路由列表,避免漏扫:
    schema_view = get_schema_view(
        openapi.Info(
            title="Snippets API",
            default_version='v1',
            description="Test description",
            terms_of_service="https://www.google.com/policies/terms/",
            contact=openapi.Contact(email="contact@snippets.local"),
            license=openapi.License(name="BSD License"),
        ),
        public=True,
        permission_classes=(permissions.AllowAny,),
        patterns=urlpatterns
    )
    
  • 特殊路由特殊处理
    admin这类返回HTML页面、非API属性的路由不建议加入Swagger文档,Swagger本身定位是API调试工具,这类页面路由加入后无法正常调试,没有实际价值。如果确实需要展示入口,可以手动往生成的schema中追加路径记录,不需要走自动扫描逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:27:24