如何阻止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
相关产品推荐
相关产品推荐

