赞
踩
pydantic 库是 python 中用于数据接口定义检查与设置管理的库。
pydantic 在运行时强制执行类型提示,并在数据无效时提供友好的错误。
具有如下优点:
Pydantic 的工作方式
安装 pydantic 命令:pip install pydantic
测试 pydantic 是否已编译
import pydantic
print('compiled:', pydantic.compiled)
在 Pydantic 中,BaseModel
是一个用于定义数据模型的基类。它允许创建一个描述数据结构、验证数据和进行数据转换的类。BaseModel
基本模型提供了属性和方法来定义字段,校验数据以及序列化数据。
BaseModel
提供的常用功能有:
pydantic 和 @dataclass 都是用于创建数据类(data class)的工具,它们有一些相似之处,但也有一些重要的区别。
@dataclass
是 Python 标准库中的一个装饰器,自 Python 3.7 引入。__init__()
、__repr__()
、__eq__()
等。@dataclass
不提供数据验证功能,仅用于数据类的创建。pydantic
是一个用于数据验证和数据解析的 Python 库,它提供了强大的数据验证和输入处理功能。pydantic
支持丰富的验证规则,包括类型检查、最小值、最大值、正则表达式匹配等。总结:
@dataclass
是一个简单而方便的选择。pydantic
更适合,因为它提供了更强大的数据验证和处理功能在 pydantic 中定义一个对象模型的主要方法是通过模型继承自 BaseModel 类,然后声明属性并显式地注解属性的数据类型。
属性可以设置默认值,设置了默认值的属性在创建模型对象时可选传参数,否则为必传参数。
支持的数据类型包括 str
、int
、float
、List
等基本数据类型以及其他的 Pydantic 类型,如 EmailStr
、UrlStr
、PositiveInt
等,来增强字段的验证能力。
简单示例
from pydantic import BaseModel
class User(BaseModel):
id: int
name: str = 'Jane Doe'
# 创建对象,传参方式1
user = User(id=1)
# 创建对象,传参方式2
item_data = {
"id": 2,
"name": 'aaa'
}
user_2 = User(**item_data)
类属性:
model_fields
:它包含了模型中每个字段的 FieldInfo
对象,以字典的形式存储。FieldInfo
对象提供了有关字段的详细信息,如字段类型、默认值等。类方法:
model_construct()
:允许在没有验证的情况下创建模型model_validate()
:用于使用 model 对象或字典创建模型的实例model_validate_json()
:用于使用 JSON 字符串创建模型的实例类对象方法:
model_copy()
:创建模型的一个副本。model_dump()
:将模型转换为字典,其中包含字段名称和对应的值。model_dump_json()
:将模型转换为 JSON 格式的字符串。@validator 装饰器用于在 Pydantic 的 BaseModel 子类中定义验证函数,以在模型创建时自动验证字段的值。
使用 @validator 装饰器可以实现自定义验证和对象之间的复杂关系。
@validator 常用的参数和说明:
*fields (可变位置参数):要验证的字段名称,可以是一个或多个字段。这些字段的值将作为验证函数的参数传递给验证函数。
传参多个字段需配合 allow_reuse 参数使用
allow_reuse(默认为 False
):如果设置为 True
,则允许验证函数重复使用。
如果多个字段需要相同的验证逻辑,可以将此参数设置为 True
以提高代码的复用性。
@validator("age", "height", allow_reuse=True)
each_item (默认为 False):设置验证器是否被施加到单独的值(例如 List,Dict,Set 等),而不是整个对象
pre(默认为 False):设置验证函数是在字段验证之前(pre=True
)还是之后(pre=False
)执行。
通常情况下,会将其保留为默认值 False,以便在字段验证之后执行验证。
pre_root(默认为 False):与 pre 参数一起使用,用于在整个模型层次结构中的字段验证之前或之后执行验证函数。
通常情况下,会将其保留为默认值 False,以便在字段验证之后执行验证。
always(默认为 False):如果设置为 True,则无论字段是否在模型中被赋值,验证函数都会被执行。
通常情况下,会将其保留为默认值 False,以便只在字段被赋值时执行验证。
注意:
代码示例
from pydantic import BaseModel, ValidationError, validator class UserModel(BaseModel): name: str names: List[str] @validator('name') def name_must_contain_space(cls, v): if ' ' not in v: raise ValueError('must contain a space') return v.title() @validator('names', each_item=True) def check_names_not_empty(cls, v): assert v != '', 'Empty strings are not allowed.' return v
BaseSettings 是 Pydantic 提供的一个基类,用于管理应用程序的配置设置。
它允许从环境变量、配置文件、命令行参数、Python 常量等多个来源加载配置选项,并进行验证和类型转换。
BaseSettings 的目标是简化配置管理和设置的过程,使得应用程序的配置更加可靠和可维护。
基本使用:创建一个继承自 BaseSettings 的模型,模型初始化程序将自动尝试通过从环境变量中读取,来确定未作为关键字参数传递的任何字段的值(如果未设置匹配的环境变量,则仍将使用默认值)
注意:
from pydantic.v1 import BaseSettings
),或使用独立的 pydantic-settings 包(安装命令:pip install pydantic-settings
)在 Pydantic 的 BaseSettings
类中,Config
内部类提供了一些属性和配置选项,用于自定义配置的行为。
可以在 Config
类中定义这些属性,以影响配置的加载和验证过程。
常用的 Config
配置选项:
env_file
:指定配置文件( Dotenv 文件)的名称。可以是文件名字符串,用于从指定的文件加载配置。
pydantic 有两种方式加载它:
class Settings(BaseSettings):
...
class Config:
# 方式1:Settings.Config 类中直接设置默认值
env_file = '.env'
# 方式2:实例化BaseSettings子类对象时传参。注意内部类属性在类为传参时加一个下划线(_)
settings = Settings(_env_file='prod.env')
注意:
pip install python-dotenv
)env_prefix
:配置环境变量的前缀。设置前缀后,Pydantic 将只加载以该前缀开头的环境变量作为配置项。
env_file_encoding
:指定配置文件的编码。默认是 "utf-8"
。
case_sensitive
:设置为 True
以启用字段名称的大小写敏感性,或设置为 False
以忽略大小写。默认是 False
。
arbitrary_types_allowed
:设置为 True
以允许在配置文件中使用自定义类型。默认是 False
。
validate_all
:是否验证所有字段,而不仅仅是被访问的字段。默认是 True
。
secrets_dir
:设置敏感信息文件目录
即使使用 secrets 目录,pydantic 仍会从 dotenv 文件或环境中读取环境变量,环境变量和dotenv 文件将始终优先于从 secrets 目录加载的值。
这些是一些常用的 Config
配置选项,可以通过在 Settings
类中的 Config
子类中定义来自定义 BaseSettings
的行为。
#from pydantic import BaseSettings
from pydantic.v1 import BaseSettings
class Settings(BaseSettings):
app_name: str = "My App"
api_key: str
class Config:
env_file = ".env" # 从环境文件加载配置
settings = Settings()
Settings
的 BaseSettings
子类。在这个类中,声明了两个配置选项:app_name
和 api_key
。app_name
有一个默认值,而 api_key
则需要从配置中加载。Config
内部类用于配置 BaseSettings
的行为。在这个示例中,使用了 env_file
来指定从名为 .env
的环境文件中加载配置。Settings
类的实例,可以轻松地访问配置选项,并自动进行验证和类型转换。如果 api_key
在配置文件中未设置或类型不匹配,Pydantic 将引发相应的异常。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。