【问题标题】:django rest framework - How to add post parameters to api document(drf_yasg)?django rest 框架 - 如何将 post 参数添加到 api 文档(drf_yasg)?
【发布时间】:2018-11-28 11:00:08
【问题描述】:
x_param = openapi.Parameter('x', in_=openapi.IN_FORM, description='srring',
                                   type=openapi.TYPE_STRING)

y_param = openapi.Parameter('y', in_=openapi.IN_FORM, description='string',
                                   type=openapi.TYPE_STRING)

@swagger_auto_schema(method='post', manual_parameters=[x_param,y_param])
@api_view(['POST'])
def test(request):
    pass

我用drf_yasg 作为招摇。

我做了上面的编码并用swagger测试了它,当我用Chrome检查时,请求有效载荷是x = 124 & y = 124124

并且,出现以下消息,发生了错误的请求错误。

{
  "detail": "JSON parse error - Expecting value: line 1 column 1 (char 0)"
}

swagger中加post参数有错吗?

【问题讨论】:

  • in_=openapi.IN_FORM 告诉它您希望它是一个表单,而您的 API 配置为接受 JSON?
  • @SungHoKim 基于 JSON 响应,服务器似乎在 POST 正文中寻找有效的 JSON 数据。您是否尝试过相应地格式化您的请求正文?也许像{'x': 124, 'y': 124124}
  • 尝试将您的 openapi.IN_FORM 更改为 openapi.IN_BODY
  • 所以我只想指出,我从 drf-yasg 切换到 drf-specacular 并且没有回头。它在定制方面更简单,并且得到积极维护。drf-yasg 上的最后一次提交是 3 个月前...drf-spectacular.readthedocs.io/en/latest/customization.html

标签: django django-rest-framework swagger drf-yasg


【解决方案1】:

问题是您将form 类型的参数添加到swagger,但您的视图似乎期望请求正文中有一个json 有效负载。在这种情况下,您可能希望将request_bodyopenapi.Schema 对象一起使用。

@swagger_auto_schema(method='post', request_body=openapi.Schema(
    type=openapi.TYPE_OBJECT, 
    properties={
        'x': openapi.Schema(type=openapi.TYPE_STRING, description='string'),
        'y': openapi.Schema(type=openapi.TYPE_STRING, description='string'),
    }
))
@api_view(['POST'])
def test(request):
    pass

这会自动将您的Schema 包装成Parameterin_=openapi.IN_BODY。 详情请见https://drf-yasg.readthedocs.io/en/stable/openapi.html

当然,首选的方法是使用基于类的GenericAPIViewSerializer,这样可以简化视图代码和文档内省。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-04-26
  • 2017-04-09
  • 2015-08-26
  • 1970-01-01
  • 2016-12-04
  • 1970-01-01
  • 1970-01-01
  • 2014-08-17
相关资源
最近更新 更多