django Rest Framework - 如何向 api 文档(drf_yasg)添加 post 参数?

标签 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 作为 Swagger 。

我完成了上面的编码并使用 swagger 进行了测试,当我使用 Chrome 检查时,请求负载为 x = 124 & y = 124124

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

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

swagger中添加post参数是不是错误?

最佳答案

问题是您正在向 swagger 添加 form 类型的参数,但您的 View 似乎期望请求正文中包含 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

这会自动将您的架构包装到in_=openapi.IN_BODY参数中。 请参阅https://drf-yasg.readthedocs.io/en/stable/openapi.html了解详情。

当然,首选方法是使用基于类的 GenericAPIView 和序列化器,这将简化 View 代码和文档自省(introspection)。

关于django Rest Framework - 如何向 api 文档(drf_yasg)添加 post 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50929098/

相关文章:

python - Django REST Framework - 未通过 Response.set_cookie() 调用设置 cookie...?

java - 如何在 Open API 3.0 中为 GET API 定义 map 对象

django - 在什么情况下我应该使用 UUID 作为 Django 模型中的主键

mysql - SQL检查列中的值大于行数

python - django-tastypie 能否在单个资源的列表和详细 View 中显示一组不同的字段?

django - 如何使用不同的动态 DJANGO_SETTINGS_MODULE 环境变量在同一服务器中运行两个 Django 应用程序

django - Django View 中的访问路径url参数

python - Django Rest Framework 按指定的 GET 参数分页

java - 如何告诉 Swagger 一个属性是一个 Map

rest - 在 Azure API 管理中管理多个 REST API