您现在的位置是:主页 > news > 四川网站建设培训/资源网站排名优化seo
四川网站建设培训/资源网站排名优化seo
admin2025/6/28 21:47:47【news】
简介四川网站建设培训,资源网站排名优化seo,天塔网站建设公司,个人免费发布房源平台使用 python 类型注释的数据验证和设置管理。pydantic在运行时强制执行类型提示,并在数据无效时提供用户友好的错误。定义数据应该如何在纯粹的、规范的 python 中;用pydantic验证它。 pydantic文档https://pydantic-docs.helpmanual.io/ 例子 from da…
使用 python 类型注释的数据验证和设置管理。pydantic在运行时强制执行类型提示,并在数据无效时提供用户友好的错误。定义数据应该如何在纯粹的、规范的 python 中;用pydantic验证它。
pydantic文档https://pydantic-docs.helpmanual.io/
例子
from datetime import datetime
from typing import List, Optional
from pydantic import BaseModelclass User(BaseModel):id: intname = 'John Doe'signup_ts: Optional[datetime] = Nonefriends: List[int] = []external_data = {'id': '123','signup_ts': '2019-06-01 12:22','friends': [1, 2, '3'],
}
user = User(**external_data)
print(user.id)
#> 123
print(repr(user.signup_ts))
#> datetime.datetime(2019, 6, 1, 12, 22)
print(user.friends)
#> [1, 2, 3]
print(user.dict())
"""
{'id': 123,'signup_ts': datetime.datetime(2019, 6, 1, 12, 22),'friends': [1, 2, 3],'name': 'John Doe',
}
"""
这里发生了什么:
id
是 int 类型的;仅注释声明告诉pydantic该字段是必需的。如果可能,字符串、字节或浮点数将被强制转换为整数;否则将引发异常。name
从提供的默认值推断为字符串;因为它有一个默认值,所以它不是必需的。signup_ts
是一个不需要的日期时间字段(None
如果未提供,则采用该值)。 pydantic将处理一个 unix timestamp int (eg1496498400
) 或一个表示日期和时间的字符串。friends
使用 python 的打字系统,并且需要一个整数列表。与id
一样,类似整数的对象将被转换为整数。
如果验证失败,pydantic 将引发错误并详细说明错误:
from pydantic import ValidationErrortry:User(signup_ts='broken', friends=[1, 2, 'not number'])
except ValidationError as e:print(e.json())
输出:
[{"loc": ["id"],"msg": "field required","type": "value_error.missing"},{"loc": ["signup_ts"],"msg": "invalid datetime format","type": "value_error.datetime"},{"loc": ["friends",2],"msg": "value is not a valid integer","type": "type_error.integer"}
]
基本原理
所以pydantic使用了一些很酷的新语言特性,但我为什么要实际去使用它呢?
与您的 IDE/linter/brain 配合得很好
无需学习新的模式定义微语言。如果你知道如何使用 python 类型提示,你就会知道如何使用pydantic。数据结构只是您使用类型注释定义的类的实例,因此自动完成、linting、mypy、IDE(尤其是PyCharm)和您的直觉都应该与您的验证数据正常工作。
两用
pydantic 的 BaseSettings类允许在“验证此请求数据”上下文和“加载我的系统设置”上下文中使用pydantic 。主要区别在于可以从环境变量中读取系统设置,并且通常需要更复杂的对象,例如 DSN 和 python 对象。
快速地
在基准测试 中,pydantic比所有其他经过测试的库都快。
验证复杂结构
使用递归pydantic模型、typing
的 标准类型(例如List
、Tuple
等Dict
)和 验证器允许清晰、轻松地定义、验证和解析复杂的数据模式。
可扩展
pydantic允许定义自定义数据类型,或者您可以使用validator装饰器装饰的模型上的方法扩展验证。
数据类集成
以及BaseModel
,pydantic提供了一个dataclass装饰器,它创建(几乎)带有输入数据解析和验证的 vanilla python 数据类。