19 数据验证与序列化之数据模型定义
在上一篇文章中,我们讨论了路径参数与查询参数的定义与验证,此篇教程将继续围绕数据验证主题展开,重点讲解如何通过定义数据模型来实现有效的数据验证和序列化。这是一个重要的环节,有助于确保我们所接收和发送的数据都是符合预期的格式和类型。
数据模型的概念
在 FastAPI 中,数据模型通常是通过 Pydantic
提供的 BaseModel
类来定义的。Pydantic
是一个数据验证和设置管理的库,它不仅能够帮助我们定义数据结构,还能验证和序列化这些数据。
定义一个数据模型的基本步骤如下:
- **继承
BaseModel
**:创建一个新的类,继承自pydantic.BaseModel
。 - 定义属性:在新类中定义属性,并且为这些属性指定类型。
- 添加验证:可以使用
Pydantic
提供的多种字段类型和验证器来确保数据的有效性。
创建数据模型实例
接下来,让我们通过一个示例来演示如何定义数据模型。假设我们要处理用户信息,用户信息包含 id
、name
和 email
等字段:
1 | from pydantic import BaseModel, EmailStr, conint |
在这个例子中,我们使用了以下 Pydantic
特性:
conint(ge=1)
:定义一个整数类型,且要求其值大于或等于 1。EmailStr
:这个类型会自动验证字符串是否符合电子邮件格式。
使用数据模型进行验证与序列化
定义好数据模型后,我们可以在 FastAPI 的路径操作中使用它。以下是一个简单的 FastAPI 应用示例:
1 | from fastapi import FastAPI |
在上述代码中,我们创建了一个 POST 路径 /users/
,要求请求体中的数据符合 User
模型的定义。FastAPI
会自动处理输入数据的验证。如果输入数据不符合模型定义,FastAPI 会返回一个 422 Unprocessable Entity 错误。
示例请求
1 | POST /users/ |
这个请求将成功返回:
1 | { |
如果尝试提交一个无效的用户,例如缺少 email
字段或 id
是负数,FastAPI 会自动返回出错信息。
处理复杂数据模型
在实际应用中,我们的模型可能会更加复杂,如嵌套模型或列表等。以下是一个示例,展示了如何使用嵌套数据模型:
1 | class Address(BaseModel): |
在这个例子中,UserWithAddress
包含一个嵌套的 Address
模型。输入数据需要符合所有字段的 validation 规则。
示例请求
1 | POST /users_with_address/ |
成功的返回将是:
1 | { |
小结
在这一节中,我们学习了如何定义数据模型以实现数据验证与序列化,使用 Pydantic
创建了简单与复杂的模型,并通过 FastAPI 路径操作验证输入数据的有效性。这些技能将为后续的内容铺平道路,接下来我们将深入探讨如何使用 Pydantic 进行更复杂的数据验证。
接下来,我们将继续探索更高级的 Pydantic 功能,期待与您在下一篇文章中见面!
19 数据验证与序列化之数据模型定义