django rest framework-如何将发布参数添加到api文档(drf_yasg)?

时间:2018-06-19 12:59:16

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

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为招。

我完成了上面的编码,并大刀阔斧地对其进行了测试,当我使用Chrome浏览器检查时,请求有效载荷为x = 124 & y = 124124

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

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

向post招贴中添加后置参数是否错误?

1 个答案:

答案 0 :(得分:0)

问题是您正在添加form类型的参数来招摇,但是您的视图似乎期望请求正文中有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包装到Parameter中的in_=openapi.IN_BODY中。 有关详细信息,请参见https://drf-yasg.readthedocs.io/en/stable/openapi.html

当然,首选的方法是将基于类的GenericAPIViewSerializer一起使用,这将简化视图代码和文档自省。