fastapi - Pydantic 类型语法解释

标签 fastapi pydantic

下面代码来自官方FastAPI tutorials page ,我无法理解这些语句(例如,name: str)。

from typing import Optional

from fastapi import FastAPI
from pydantic import BaseModel


class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None


app = FastAPI()


@app.post("/items/")
async def create_item(item: Item):
    return item

我的意思是,我知道他们应该强制执行类型,但他们应该如何执行,因为 python 不强制执行类型。

  • 我还看到了 Pydantic手册,但在类声明中没有看到关于此特定语法(例如,name: str)的解释。

有人可以为我解释一下这个语法吗?当你以这种方式创建一个类时,你如何检查它的类型?

提前致谢。

最佳答案

Python 的输入行为

Python 3.5 以上支持打字:https://docs.python.org/3/library/typing.html . 如果你的类型提示不正确,你的代码仍然会运行——正如文档所说:它只是一个类型提示。 Python 仍然是一种动态类型的语言。 但是,您可以使用 MyPy 在运行前捕获这些错误。

Pydantic 的打字行为

尽管了解 Pydantic 的行为也很重要:如果您的类型不是 str,但可以进行转换,它将首先转换为字符串,而不会出现任何错误消息。否则,它将引发错误。

如果你想在没有转换的情况下强制引发错误,你应该使用 Pydantic 严格类型:https://pydantic-docs.helpmanual.io/usage/types/#strict-types

但 Pydantic 文档告诉您的是: “[...] 仅注释声明告诉 pydantic 该字段是必需的。如果可能,字符串、字节或 float 将被强制转换为整数;否则将引发异常。” ( https://pydantic-docs.helpmanual.io/ )

关于fastapi - Pydantic 类型语法解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66133960/

相关文章:

python - 存储用于编码/解码 token 数据的 JWT key 的安全方式

python - Swagger ui 范围错误 : Maximum call stack size exceeded in FastAPI

python - FastAPI动态多路径参数

python - 如何使 Pydantic 中的 @root_validator 返回模型类对象而不是值?

python - 模型属性是否有 Pydantic 约定,默认为另一个属性的函数?

python - 将 pandas 数据帧传递到 FastAPI 以进行 NLP ML

python - SQLAlchemy:不同数据库之间的联接并在模块中使用不同文件

python - 用 FastAPI TestClient 测试返回 422 状态码

python - 为什么我们使用 yield 在 Fastapi 中使用 sqlalchemy 获取 Sessionlocal?

python - FastAPI 和 Pydantic 的正确类型工厂