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

Sun*_*Kim 11 django swagger django-rest-framework 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
Run Code Online (Sandbox Code Playgroud)

我用作drf_yasg招摇.

我做了上面的编码并用swagger进行了测试,当我查看Chrome时,请求的有效负载是x = 124 & y = 124124.

并且,通过以下消息,发生了错误的请求错误.

{
  "detail": "JSON parse error - Expecting value: line 1 column 1 (char 0)"
}
Run Code Online (Sandbox Code Playgroud)

将帖子参数添加到swagger是不对的?

axn*_*san 20

问题是您正在向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
Run Code Online (Sandbox Code Playgroud)

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

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