【问题标题】:How do I include 400 validation errors in drf-spectacular?如何在 drf-spectacular 中包含 400 个验证错误?
【发布时间】:2021-11-24 19:10:59
【问题描述】:

我想查看 400 响应中的验证详细信息,因为它们可以被序列化程序重新调用。序列化程序可能会根据缺少的字段或无效值返回错误,我希望文档指出状态码 400 会出现哪种错误。类似这样的事情

200:成功

400: [ { “organization_id”:[ “这是必填栏。” ] } ] #包括任何可能来自序列化程序的验证错误

我目前的代码是这样的

@extend_schema(
        summary="Create a new transaction",
        responses={
            201: OpenApiResponse(
                description='Success',
            ),
            400: OpenApiResponse(
                description='Bad request. One or more errors occured.',
            ),
        },
    )

目前这个输出 200:成功

400:错误请求。发生了一个或多个错误。

有没有类似的

400: OpenApiResponse(description=customSerializerErrors,
 ), #customSerializerErrors is something i hope gets errors from the serializer

【问题讨论】:

  • 您想覆盖错误信息对吗?请确认
  • 我想在文档中显示错误信息。我希望它们出现在状态码旁边。这些是序列化程序将返回的相同错误消息。
  • 对不起,请您添加一个示例
  • 我试图添加一个我想要实现的示例,但我不知道它是否存在或可以完成@VishalPandey
  • 400: description=customSerializerErrors 你可以添加这个我不认为我们可以做你说的响应你可以添加这样的字符串“OpenApiResponse(description=customSerializerErrors)”跨度>

标签: python django django-rest-framework drf-spectacular


【解决方案1】:

drf-spectacular 基于序列化器工作。

OpenApiResponse 是一个方便的包装器,大多数时候不需要。实际上在这里,它可能没有按照您的预期进行。你需要给OpenApiResponse(response=SomeSerializer),否则你说没有响应体,因为默认是None ==没有响应。

您可能想要这样做:

@extend_schema(
        summary="Create a new transaction",
        responses={
            201: YourSerializer,
            400: YourErrorSerializer,
        },
    )

没有预定义的YourErrorSerializer,因为Django 的error_handler 是高度动态的,无法检查。目前你需要自己写这个YourErrorSerializer。请注意,此序列化程序并未实际使用,而只是说明响应的结构。

【讨论】:

    猜你喜欢
    • 2021-02-09
    • 2015-04-03
    • 1970-01-01
    • 2021-04-16
    • 2015-03-27
    • 2022-11-23
    • 2020-06-24
    • 2023-03-27
    • 2016-08-22
    相关资源
    最近更新 更多