如何解决drf-spectacular中api_view搭配使用时无接口定义问题
问题解决:drf-spectacular 显示“No operations defined in spec!”
你的代码核心问题是混用了类视图(CBV)和函数视图(FBV)的装饰器——把仅适用于FBV的@api_view装饰到了CBV的get方法上,导致drf-spectacular无法识别视图的接口定义。
正确写法分两种场景:
场景1:使用类视图(CBV)
类视图的方法不需要@api_view装饰,直接用@extend_schema标注接口即可:
# views.py from rest_framework.views import APIView from drf_spectacular.utils import extend_schema, OpenApiTypes class FeedView(APIView): @extend_schema(responses=OpenApiTypes.FLOAT) def get(self, request, format=None): pass # pragma: no cover
场景2:使用函数视图(FBV)
如果要写FBV,需把视图定义为独立函数,而非类的方法:
# views.py from rest_framework.decorators import api_view from drf_spectacular.utils import extend_schema, OpenApiTypes @extend_schema(responses=OpenApiTypes.FLOAT) @api_view(['GET']) def feed_view(request, format=None): pass # pragma: no cover # 对应的urls.py修改 path('pi/', feed_view),
额外检查项
确保项目配置正确:
- 将
drf-spectacular加入INSTALLED_APPS:
INSTALLED_APPS = [ # ... 其他应用 'drf_spectacular', ]
- 在REST_FRAMEWORK配置中指定schema类:
REST_FRAMEWORK = { 'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema', }
内容的提问来源于stack exchange,提问作者Tony.Luo
相关产品推荐
相关产品推荐

