REST API in Python with FastAPI and pydantic: read-only 属性 in model
REST API in Python with FastAPI and pydantic: read-only property in model
假设一个 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 class 代码中找不到任何提及 "read only"、"read-only" 或 "readonly" 的地方。
谷歌搜索我发现 post 其中提到
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是取自官方全栈项目生成器的真实用户模型示例。您可以看到如何有多个模型根据上下文定义用户模式。
假设一个 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 class 代码中找不到任何提及 "read only"、"read-only" 或 "readonly" 的地方。
谷歌搜索我发现 post 其中提到
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是取自官方全栈项目生成器的真实用户模型示例。您可以看到如何有多个模型根据上下文定义用户模式。