pydantic的BaseModel和Field
时间: 2024-09-30 12:06:47 浏览: 59
`Pydantic` 是一个强大的 Python 库,用于数据验证、设置默认值以及模型定义。`BaseModel` 是 `pydantic` 中的核心组件,它是所有其他模式(如表单、数据类等)的基础类。`Field` 是 `BaseModel` 的一个重要组成部分,它用来声明字段的各种属性。
`BaseModel`:
- **定义**: `pydantic.BaseModel` 类提供了一个轻量级的方式来创建具有良好结构的数据模型。当你继承自 `BaseModel` 并定义了字段后,它可以自动处理序列化、反序列化(将数据从字典转换为类实例或反之)以及错误检查。
- **用途**: 你可以使用它来组织和验证请求体、响应体、配置选项等各种类型的数据。
- **实例化**: 只需给 `BaseModel` 的构造函数传递一个字典,其中包含你所定义的字段及其对应值,就可以轻松地初始化模型实例。
`Field`:
- **描述**: `Field` 是一个元类,用于定义字段的各种特性和行为。例如,你可以指定字段的名字、默认值、是否必需、数据类型、格式化规则等。
- **常用属性**:
- `name`: 字段名称,用于内部存储和API文档生成。
- `default`: 默认值,如果提供的值缺失则使用这个默认值。
- `required`: 是否是必填项,默认False,如果设为True则字段不能为空。
- `type_`: 数据类型,如 `int`, `str`, `List`, `Dict` 等。
- `alias`: 别名,可以在序列化时使用不同的键名。
- `min_length`/`max_length`: 对字符串长度的限制。
- `regex`: 正则表达式验证。
- **实例化**: 当你在 `BaseModel` 中声明一个字段时,例如 `name: str = Field(...)`,实际上是在创建一个 `Field` 实例并将其添加到 `BaseModel` 的内部字段列表中。
使用例子:
```python
from pydantic import BaseModel, Field
class User(BaseModel):
username: str = Field(min_length=5, max_length=20, required=True)
email: str = Field(format='email', default=None)
age: int = Field(gt=0)
# 初始化一个User实例
user_data = {"username": "myusername", "age": 25}
user = User(**user_data) # 自动进行验证和类型转换
# 序列化成字典
json_user = user.json()
```
阅读全文