DRF-YASG无法使用IN_BODY参数进行Swagger设置。

8
class Templates(APIView):
    parser_classes = (FormParser,)

    @swagger_auto_schema(manual_parameters=[
        openapi.Parameter('title', in_=openapi.IN_FORM, description='作品标题', type=openapi.TYPE_STRING, required=True)]
    )
    def post(self, reuqest):
        pass


当我指定in_=openapi.IN_FORMparser_classes = (FormParser,)时,Swagger前端页面可以正常工作,但如果我修改为in_=openapi.IN_BODY,则会出现以下错误:
Traceback (most recent call last):
  File "C:\pythonenv\forecast_env\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\pythonenv\forecast_env\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\pythonenv\forecast_env\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\pythonenv\forecast_env\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "C:\pythonenv\forecast_env\lib\site-packages\django\views\generic\base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\pythonenv\forecast_env\lib\site-packages\rest_framework\views.py", line 505, in dispatch
    response = self.handle_exception(exc)
  File "C:\pythonenv\forecast_env\lib\site-packages\rest_framework\views.py", line 465, in handle_exception
    self.raise_uncaught_exception(exc)
  File "C:\pythonenv\forecast_env\lib\site-packages\rest_framework\views.py", line 476, in raise_uncaught_exception
    raise exc
  File "C:\pythonenv\forecast_env\lib\site-packages\rest_framework\views.py", line 502, in dispatch
    response = handler(request, *args, **kwargs)
  File "C:\pythonenv\forecast_env\lib\site-packages\drf_yasg\views.py", line 94, in get
    schema = generator.get_schema(request, self.public)
  File "C:\pythonenv\forecast_env\lib\site-packages\drf_yasg\generators.py", line 254, in get_schema
    paths, prefix = self.get_paths(endpoints, components, request, public)
  File "C:\pythonenv\forecast_env\lib\site-packages\drf_yasg\generators.py", line 412, in get_paths
    operation = self.get_operation(view, path, prefix, method, components, request)
  File "C:\pythonenv\forecast_env\lib\site-packages\drf_yasg\generators.py", line 454, in get_operation
    operation = view_inspector.get_operation(operation_keys)
  File "C:\pythonenv\forecast_env\lib\site-packages\drf_yasg\inspectors\view.py", line 36, in get_operation
    parameters = self.add_manual_parameters(parameters)
  File "C:\pythonenv\forecast_env\lib\site-packages\drf_yasg\inspectors\view.py", line 162, in add_manual_parameters
    raise SwaggerGenerationError("specify the body parameter as a Schema or Serializer in request_body")
drf_yasg.errors.SwaggerGenerationError: specify the body parameter as a Schema or Serializer in request_body
[16/Jul/2020 16:39:48] "GET /api/swagger?format=openapi HTTP/1.1" 500 19229

有没有人可以给我一个关于如何在 drf-yasg 中设置 application/json 参数的例子?

drf-yasg  1.17.1
Django    3.0.5
1个回答

11

您应该使用request_body参数。

    @swagger_auto_schema(methods=['post'],
                         request_body=openapi.Schema(
                             type=openapi.TYPE_OBJECT,
                             required=['version'],
                             properties={
                                 'version': openapi.Schema(type=openapi.TYPE_STRING)
                             },
                         ),
                         operation_description='Uninstall a version of Site')
    def post(self, request):
        pass

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接