【问题标题】:REST API in Python with FastAPI and pydantic: read-only property in model带有 FastAPI 和 pydantic 的 Python 中的 REST API:模型中的只读属性
【发布时间】:2020-01-26 16:05:26
【问题描述】:

假设一个 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)

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

【问题讨论】:

    标签: python python-3.x rest fastapi pydantic


    【解决方案1】:

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

    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 是一个真实的用户模型示例,取自官方全栈项目生成器。您可以看到有多个模型如何根据上下文定义用户模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 2020-10-15
      • 2016-05-10
      相关资源
      最近更新 更多