python - Python 中的 REST API 与 FastAPI 和 pydantic : read-only property in model

标签 python python-3.x rest fastapi pydantic

假设一个 REST API 在资源/foos 上定义了一个 POST 方法来创建一个新的 Foo。创建 Foo 时,Foo 的名称是一个输入参数(存在于请求正文中)。当服务器创建 Foo 时,它会为其分配一个 ID。此 ID 与 REST 响应中的名称一起返回。 我正在寻找类似于 OpenAPI 中的 readOnly 的东西。

输入 JSON 应如下所示:

{
    "name": "bar"
}

输出 JSON 应如下所示:

{
    "id": 123,
    "name": "bar"
}

有没有办法重用相同的 pydantic 模型?或者是否有必要使用两种不同的模型?

class FooIn(BaseModel):
    name: str

class Foo(BaseModel):
    id: int
    name: str

我在 pydantic 文档或 Field 类代码中找不到任何提及“只读”、“只读”或“只读”的内容。

谷歌搜索我发现了一篇提到的帖子

id: int = Schema(..., readonly=True)

但这似乎对我的用例没有影响。

最佳答案

拥有多个模型是可以的。您可以使用继承来减少代码重复:

from pydantic import BaseModel


# Properties to receive via API create/update
class Foo(BaseModel):
    name: str


# Properties to return via API
class FooDB(Foo):
    id: int

documentation 顺便说一句,这非常好!,对此进行了更深入的探讨。

Here是取自官方全栈项目生成器的真实用户模型示例。您可以看到如何根据上下文使用多个模型来定义用户架构。

关于python - Python 中的 REST API 与 FastAPI 和 pydantic : read-only property in model,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59920126/

相关文章:

api - 如何防止对 RESTful 数据服务的蛮力攻击

java - 使用 javax.ws 和 angular 打开 pdf 文件

Python 时间戳正则表达式

python - 配置了多个身份验证后端,因此必须提供 `backend` 参数或为用户设置 `backend` 属性

python-3.x - 散列与 python 中的期望值不匹配的元组

python-3.x - 训练/分割数据后在 X_train 和 X_test 中获取 NaN

java - 在资源 Controller 中使用多个服务的最佳方法是什么?

python - 如何有条件地更改相邻行的列值?

python - 使用函数打开/关闭 sqlite 数据库连接?

Python 错误 : OSError: [Errno 22] Invalid argument