简介
- 本文将引导你完成使用 pydantic 进行数据验证的过程。Pydantic 是一个 Python 库,其验证核心(
pydantic-core)用 Rust 编写。示例使用 pydantic v2。 - 在开始之前,请确保你的环境中已安装 Python 和 pydantic 库。请查看下面的 pydantic 安装命令。
创建模型
- 首先,我们需要导入并让我们的类继承自
pydantic.BaseModel以开始验证。在我们的示例中,我们将创建一个名为Person的类,它将包含姓名、年龄和一个电子邮件。
- 有了这个类,当我们实例化它时,pydantic 将验证
name和email是否为字符串,以及age是否为整数。
使用模型
- 现在我们已经创建了它,接下来我们将实例化该类。我们将创建一个包含数据的字典,并将其解包传入我们的类。
- 上面的示例不会引发任何错误,因为所有字段的类型都正确。默认情况下,pydantic 还会转换兼容的值:如果
age是字符串"19",它会变成整数19。现在我们将传入错误的数据,以确认我们的验证是否生效。
- 上面的示例会引发
ValidationError,因为age需要是整数,而"nineteen"无法转换为整数:
- 如果想处理这个错误,而不是让它中断程序,请用
try/except捕获它。它的errors()方法会列出每个无效字段:
严格模式
- 如果你也想拒绝
"19"这样的字符串,请在模型中启用严格模式。这样age只接受真正的int,Person(name="John", age="19", email="john@example.com")会引发ValidationError。
创建 dataclass
- 你也可以使用 pydantic 创建 dataclass。它们与标准的 Python dataclass 类似,但会像
BaseModel一样验证字段。
- 如果我们向
age发送字符串"19",它将被转换为int类型的19。
Pydantic 支持递归验证,这意味着在验证嵌套模型时,它也会验证内部的
模型。如果某个类包含一个
Person 的列表 people: list[Person],pydantic 会检查列表中的每一项并将其转换为 Person。附加内容
- Pydantic 有一些附加功能,例如电子邮件验证和一个后备的时区包。要安装它们,请运行以下命令:
- 你可以通过运行以下命令将两者一起安装。
pydantic[email]添加了EmailStr类型,它会验证user@domain.tld格式并规范化地址。
在启动时验证环境变量
- 机器人和 API 会从环境变量中读取令牌和设置。使用
pydantic-settings时,缺失或无效的变量会让应用在启动时就以清晰的错误停止,而不是在之后处理请求的过程中失败。
- 在一个继承自
BaseSettings的类中声明应用所需的变量。每个字段都会读取同名的环境变量(不区分大小写):discord_token读取DISCORD_TOKEN。
settings.py
- 如果没有设置
DISCORD_TOKEN,Settings()会为discord_token引发ValidationError,消息为Field required。像PORT=abc这样的值也会以同样的方式失败,因为port必须是整数。 SecretStr会在你打印或记录设置时隐藏令牌。请使用settings.discord_token.get_secret_value()读取真实值。- 在 Square Cloud 上,请在控制面板中或使用
squarecloud app env set设置这些变量,并在你的requirements.txt中列出pydantic-settings。请参阅环境变量。
后续步骤
环境变量
设置你的 settings 类所读取的变量。
FastAPI
部署一个用 pydantic 验证请求的 API。
Discord 机器人
托管一个从环境变量读取令牌的机器人。
你喜欢这篇文章吗?
- 我们精心创作了这些内容,只为提供尽可能好的帮助。 如果这篇文章对你有任何帮助,请支持我们的工作!已经有开发者在 Google 和 Trustpilot 上给 Square Cloud 打出了 4.9/5 分(共 402 条评价),也留下你的评价吧!这能帮助我们了解什么对你最重要。
Google Reviews
在 Google Reviews 上留下你的评价。
Trustpilot
在 Trustpilot 上留下你的评价。

