Python的Pydantic
BaseModel&BaseSetting
==Pydantic==包是一个数据类型管理器,它主要用于规范接口的数据传递,在大型开发中有很大的用处,一般情况下我们经常使用两个子类
BaseModel
:标准模型BaseSetting
:标准设置
他们两个在基础用法上没有太大差别,但是一个是普通的数据规范,一个是用于读取设置和环境变量
参数,按照你的实际需求来定义数据就行,如果你的数据是作为环境变量使用的,就使用basesetting
就可以了。
我们有一个涩图插件的配置需要从Json文件加载,内容包含管理员名单、使用涩图的CD、启用插件的群名单,先设计数据格式,如下
1
2
3
4
5
6
7
8
9
10
11
12
13
from pydantic import BaseSetting, Extra
from typing import List
class Config(BaseSetting):
superusers: List[str]
setu_cd: int
enable_groups: List[int]
class Config:
extra = Extra.ignore # 传入的多余参数处理方式(忽略)
case_sensitive = False # 环境变量大小写是否敏感
env_file = ".env" # 需要 python-dotenv依赖
env_prefix = "setu_" # 环境变量前缀(默认无前缀)
实例化方法
检查必须的传参:
Config.__fields_set__
直接传参
setu_conf = Config(superusers=[],sety_cd=0,enable_group=[])
访问/输出
Config.*
:直接通过变量名访问值- 转换成字典输出
Config.dict()
dict(Config)
- 转换成Json格式
Config.json()
- 浅拷贝:
Config.copy()
辅助方法(函数)
Config.parse_obj( ...[dict_object])
:从字典对象加载并实例化==推荐使用==Config.parse_raw(...[str(dict)])
:从一个字典形式的字符串加载并实例化Config.parse_file([file_cursor | path])
:从路径或文件指针对象加载Json文件并实例化
基本模型(BaseModel
)也具有上述的方法,这里就不重复叙述
可以通过继承的方式修改一些属性的类型
1 |
|
Field
Field
类是一个有用的类,能更好的约束模型中的属性
1 |
|
具体的Field
对象支持哪些写法见下表【参照】:
参数名称 | 描述 |
---|---|
default | (位置参数)字段的默认值。由于Field替换了字段的默认值,因此第一个参数可用于设置默认值。使用省略号 ( …) 表示该字段为必填项。 |
default_factory | 当该字段需要默认值时将被调用。除其他目的外,这可用于设置动态默认值。禁止同时设置default和default_factory。 |
alias | 字段的别名 |
description | 文档字符串 |
exclude | 在转储(.dict和.json)实例时排除此字段 |
include | 在转储(.dict和.json)实例时(仅)包含此字段 |
const | 此参数必须与字段的默认值相同(如果存在) |
gt | 对于数值 ( int, float, ),向 JSON SchemaDecimal添加“大于”的验证和注释exclusiveMinimum |
ge | 对于数值,这将添加“大于或等于”的验证和minimumJSON 模式的注释 |
lt | 对于数值,这会为exclusiveMaximumJSON Schema添加“小于”的验证和注释 |
le | 对于数值,这将添加“小于或等于”的验证和maximumJSON 模式的注释 |
multiple_of | 对于数值,这会multipleOf向 JSON Schema添加“多个”的验证和注释 |
max_digits | 对于Decimal值,这将添加验证以在小数点内具有最大位数。它不包括小数点前的零或尾随的小数零。 |
decimal_places | 对于Decimal值,这增加了一个验证,最多允许小数位数。它不包括尾随十进制零。 |
min_itemsminItems | 对于列表值,这会向 JSON Schema添加相应的验证和注释 |
max_itemsmaxItems | 对于列表值,这会向 JSON Schema添加相应的验证和注释 |
unique_itemsuniqueItems | 对于列表值,这会向 JSON Schema添加相应的验证和注释 |
min_lengthminLength | 对于字符串值,这会向 JSON Schema添加相应的验证和注释 |
max_lengthmaxLength | 对于字符串值,这会向 JSON Schema添加相应的验证和注释 |
allow_mutation | 一个布尔值,默认为True. TypeError当为 False 时,如果在实例上分配了字段,则该字段引发 a 。模型配置必须设置validate_assignment为True执行此检查。 |
regex | 对于字符串值,这会添加从传递的字符串生成的正则表达式验证和patternJSON 模式的注释 |
repr | 一个布尔值,默认为True. 当为 False 时,该字段应从对象表示中隐藏。 |
** | 任何其他关键字参数(例如examples)将逐字添加到字段的架构中 |
Python的Pydantic
https://qlozin.top/2023/01/16/Python Pydantic/