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

如何阻止drf spectacular自动生成无需展示的接口Schema?

排除DRF Spectacular中不需要的接口Schema方法
  • 单个视图/动作排除:给目标视图或视图动作加上@extend_schema(exclude=True)装饰器,直接标记不纳入Schema生成。
    单个视图动作示例:

    from drf_spectacular.utils import extend_schema
    
    class UnwantedAPIView(APIView):
        @extend_schema(exclude=True)
        def get(self, request):
            return Response({"data": "内容"})
    

    整个视图集排除示例:

    @extend_schema(exclude=True)
    class UnwantedViewSet(viewsets.ModelViewSet):
        queryset = SomeModel.objects.all()
        serializer_class = SomeSerializer
    
  • 全局URL批量过滤:在settings.py的SPECTACULAR_SETTINGS里,用SERVE_EXCLUDE配置要排除的URL正则,批量过滤接口:

    SPECTACULAR_SETTINGS = {
        # 保留原有其他配置
        'SERVE_EXCLUDE': [
            r'^internal-api/.*$',
            r'^test/.*$',
        ],
    }
    
  • 路由层面直接排除:定义URL时给不需要的接口加上include_in_schema=False参数,从路由源头上跳过Schema生成:

    urlpatterns = [
        path('unwanted/', UnwantedAPIView.as_view(), name='unwanted', include_in_schema=False),
        # 正常接口保留配置
        path('normal/', NormalAPIView.as_view(), name='normal'),
    ]
    
  • 权限控制自动排除:如果是内部专用接口,自定义权限类,让Schema生成时自动跳过这类接口:

    from rest_framework.permissions import BasePermission
    
    class InternalOnly(BasePermission):
        def has_permission(self, request, view):
            # 生成Schema的请求会携带swagger_fake_view标记,直接返回False排除
            if getattr(request, 'swagger_fake_view', False):
                return False
            return request.user.is_staff
    
    class InternalAPIView(APIView):
        permission_classes = [InternalOnly]
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 12:24:52