26
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)"
}

大摇大摆加post参数有错吗?

4

1 回答 1

27

问题是您正在向formswagger 添加类型参数,但您的视图似乎期望请求正文中有一个 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

这将自动将您包装SchemaParameterof in_=openapi.IN_BODY。有关详细信息,请参阅https://drf-yasg.readthedocs.io/en/stable/openapi.html

当然,首选的方法是使用基于类GenericAPIView和 a Serializer,这将简化视图代码和文档内省。

于 2018-12-22T18:15:30.070 回答