问题描述
我有一个简单的视图,它将“电子邮件”作为查询参数,我希望将它记录在 OpenAPI 自动生成的架构中。到目前为止,我尝试将 method_decorator
与 swagger_auto_schema
一起应用于 API View 类定义,但没有成功:
from drf_yasg.utils import swagger_auto_schema
from drf_yasg import openapi
from django.utils.decorators import method_decorator
@method_decorator(name='retrieve',decorator=swagger_auto_schema(manual_parameters=[
openapi.Parameter('email',openapi.IN_QUERY,description="Email to be checked",type=openapi.TYPE_STRING)]))
class EmailCheckView(generics.RetrieveAPIView):
serializer_class = EmailCheckSerializer
def get_queryset(self):
email = self.request.query_params.get('email',None)
if not email:
raise Http404
return User.objects.filter(email=self.kwargs['email'])
DRF:3.12.2
drf-yasg: 1.20.0
我的 swagger 模式添加到 urls.py 中:
from drf_yasg.views import get_schema_view
from drf_yasg import openapi
schema_view = get_schema_view(
openapi.Info(
title="My API",default_version='v1',description="",),public=True,permission_classes=[permissions.AllowAny],)
urlpatterns = [
...
path('docs/',schema_view.with_ui('swagger',cache_timeout=0),name='schema-swagger-ui'),...
]
解决方法
改变
name='retrieve'
到
name='get'
@method_decorator(
name="get",# change is here
decorator=swagger_auto_schema(
manual_parameters=[
openapi.Parameter(
"email",openapi.IN_QUERY,description="Email to be checked",type=openapi.TYPE_STRING,)
]
),)
class EmailCheckView(generics.RetrieveAPIView):
serializer_class = EmailCheckSerializer
def get_queryset(self):
email = self.request.query_params.get("email",None)
if not email:
raise Http404
return User.objects.filter(email=self.kwargs["email"])
注意:我不确定问题属于 method_decorator(...)
还是 drf-yasg
本身