Pydantic 类型
pydantic.types ¶
types 模块包含 pydantic 使用的自定义类型。
PositiveInt module-attribute
¶
一个必须大于零的整数。
from pydantic import BaseModel, PositiveInt, ValidationError
class Model(BaseModel):
positive_int: PositiveInt
m = Model(positive_int=1)
print(repr(m))
#> Model(positive_int=1)
try:
Model(positive_int=-1)
except ValidationError as e:
print(e.errors())
'''
[
{
'type': 'greater_than',
'loc': ('positive_int',),
'msg': 'Input should be greater than 0',
'input': -1,
'ctx': {'gt': 0},
'url': 'https://errors.pydantic.dev/2/v/greater_than',
}
]
'''
NegativeInt module-attribute
¶
一个必须小于零的整数。
from pydantic import BaseModel, NegativeInt, ValidationError
class Model(BaseModel):
negative_int: NegativeInt
m = Model(negative_int=-1)
print(repr(m))
#> Model(negative_int=-1)
try:
Model(negative_int=1)
except ValidationError as e:
print(e.errors())
'''
[
{
'type': 'less_than',
'loc': ('negative_int',),
'msg': 'Input should be less than 0',
'input': 1,
'ctx': {'lt': 0},
'url': 'https://errors.pydantic.dev/2/v/less_than',
}
]
'''
NonPositiveInt module-attribute
¶
一个必须小于或等于零的整数。
from pydantic import BaseModel, NonPositiveInt, ValidationError
class Model(BaseModel):
non_positive_int: NonPositiveInt
m = Model(non_positive_int=0)
print(repr(m))
#> Model(non_positive_int=0)
try:
Model(non_positive_int=1)
except ValidationError as e:
print(e.errors())
'''
[
{
'type': 'less_than_equal',
'loc': ('non_positive_int',),
'msg': 'Input should be less than or equal to 0',
'input': 1,
'ctx': {'le': 0},
'url': 'https://errors.pydantic.dev/2/v/less_than_equal',
}
]
'''
NonNegativeInt module-attribute
¶
一个必须大于或等于零的整数。
from pydantic import BaseModel, NonNegativeInt, ValidationError
class Model(BaseModel):
non_negative_int: NonNegativeInt
m = Model(non_negative_int=0)
print(repr(m))
#> Model(non_negative_int=0)
try:
Model(non_negative_int=-1)
except ValidationError as e:
print(e.errors())
'''
[
{
'type': 'greater_than_equal',
'loc': ('non_negative_int',),
'msg': 'Input should be greater than or equal to 0',
'input': -1,
'ctx': {'ge': 0},
'url': 'https://errors.pydantic.dev/2/v/greater_than_equal',
}
]
'''
StrictInt module-attribute
¶
一个必须在严格模式下验证的整数。
from pydantic import BaseModel, StrictInt, ValidationError
class StrictIntModel(BaseModel):
strict_int: StrictInt
try:
StrictIntModel(strict_int=3.14159)
except ValidationError as e:
print(e)
'''
1 validation error for StrictIntModel
strict_int
Input should be a valid integer [type=int_type, input_value=3.14159, input_type=float]
'''
PositiveFloat module-attribute
¶
一个必须大于零的浮点数。
from pydantic import BaseModel, PositiveFloat, ValidationError
class Model(BaseModel):
positive_float: PositiveFloat
m = Model(positive_float=1.0)
print(repr(m))
#> Model(positive_float=1.0)
try:
Model(positive_float=-1.0)
except ValidationError as e:
print(e.errors())
'''
[
{
'type': 'greater_than',
'loc': ('positive_float',),
'msg': 'Input should be greater than 0',
'input': -1.0,
'ctx': {'gt': 0.0},
'url': 'https://errors.pydantic.dev/2/v/greater_than',
}
]
'''
NegativeFloat module-attribute
¶
一个必须小于零的浮点数。
from pydantic import BaseModel, NegativeFloat, ValidationError
class Model(BaseModel):
negative_float: NegativeFloat
m = Model(negative_float=-1.0)
print(repr(m))
#> Model(negative_float=-1.0)
try:
Model(negative_float=1.0)
except ValidationError as e:
print(e.errors())
'''
[
{
'type': 'less_than',
'loc': ('negative_float',),
'msg': 'Input should be less than 0',
'input': 1.0,
'ctx': {'lt': 0.0},
'url': 'https://errors.pydantic.dev/2/v/less_than',
}
]
'''
NonPositiveFloat module-attribute
¶
一个必须小于或等于零的浮点数。
from pydantic import BaseModel, NonPositiveFloat, ValidationError
class Model(BaseModel):
non_positive_float: NonPositiveFloat
m = Model(non_positive_float=0.0)
print(repr(m))
#> Model(non_positive_float=0.0)
try:
Model(non_positive_float=1.0)
except ValidationError as e:
print(e.errors())
'''
[
{
'type': 'less_than_equal',
'loc': ('non_positive_float',),
'msg': 'Input should be less than or equal to 0',
'input': 1.0,
'ctx': {'le': 0.0},
'url': 'https://errors.pydantic.dev/2/v/less_than_equal',
}
]
'''
NonNegativeFloat module-attribute
¶
一个必须大于或等于零的浮点数。
from pydantic import BaseModel, NonNegativeFloat, ValidationError
class Model(BaseModel):
non_negative_float: NonNegativeFloat
m = Model(non_negative_float=0.0)
print(repr(m))
#> Model(non_negative_float=0.0)
try:
Model(non_negative_float=-1.0)
except ValidationError as e:
print(e.errors())
'''
[
{
'type': 'greater_than_equal',
'loc': ('non_negative_float',),
'msg': 'Input should be greater than or equal to 0',
'input': -1.0,
'ctx': {'ge': 0.0},
'url': 'https://errors.pydantic.dev/2/v/greater_than_equal',
}
]
'''
StrictFloat module-attribute
¶
一个必须在严格模式下验证的浮点数。
from pydantic import BaseModel, StrictFloat, ValidationError
class StrictFloatModel(BaseModel):
strict_float: StrictFloat
try:
StrictFloatModel(strict_float='1.0')
except ValidationError as e:
print(e)
'''
1 validation error for StrictFloatModel
strict_float
Input should be a valid number [type=float_type, input_value='1.0', input_type=str]
'''
FiniteFloat module-attribute
¶
FiniteFloat = Annotated[float, AllowInfNan(False)]
一个必须是有限的浮点数 (不能是 -inf
, inf
, 或 nan
)。
from pydantic import BaseModel, FiniteFloat
class Model(BaseModel):
finite: FiniteFloat
m = Model(finite=1.0)
print(m)
#> finite=1.0
UUID1 module-attribute
¶
UUID1 = Annotated[UUID, UuidVersion(1)]
一个 UUID,其版本必须为 1。
import uuid
from pydantic import UUID1, BaseModel
class Model(BaseModel):
uuid1: UUID1
Model(uuid1=uuid.uuid1())
UUID3 module-attribute
¶
UUID3 = Annotated[UUID, UuidVersion(3)]
一个 UUID,其版本必须为 3。
import uuid
from pydantic import UUID3, BaseModel
class Model(BaseModel):
uuid3: UUID3
Model(uuid3=uuid.uuid3(uuid.NAMESPACE_DNS, 'pydantic.org'))
UUID4 module-attribute
¶
UUID4 = Annotated[UUID, UuidVersion(4)]
一个 UUID,其版本必须为 4。
import uuid
from pydantic import UUID4, BaseModel
class Model(BaseModel):
uuid4: UUID4
Model(uuid4=uuid.uuid4())
UUID5 module-attribute
¶
UUID5 = Annotated[UUID, UuidVersion(5)]
一个 UUID,其版本必须为 5。
import uuid
from pydantic import UUID5, BaseModel
class Model(BaseModel):
uuid5: UUID5
Model(uuid5=uuid.uuid5(uuid.NAMESPACE_DNS, 'pydantic.org'))
UUID6 module-attribute
¶
UUID6 = Annotated[UUID, UuidVersion(6)]
一个 UUID,其版本必须为 6。
import uuid
from pydantic import UUID6, BaseModel
class Model(BaseModel):
uuid6: UUID6
Model(uuid6=uuid.UUID('1efea953-c2d6-6790-aa0a-69db8c87df97'))
UUID7 module-attribute
¶
UUID7 = Annotated[UUID, UuidVersion(7)]
一个 UUID,其版本必须为 7。
import uuid
from pydantic import UUID7, BaseModel
class Model(BaseModel):
uuid7: UUID7
Model(uuid7=uuid.UUID('0194fdcb-1c47-7a09-b52c-561154de0b4a'))
UUID8 module-attribute
¶
UUID8 = Annotated[UUID, UuidVersion(8)]
一个 UUID,其版本必须为 8。
import uuid
from pydantic import UUID8, BaseModel
class Model(BaseModel):
uuid8: UUID8
Model(uuid8=uuid.UUID('81a0b92e-6078-8551-9c81-8ccb666bdab8'))
FilePath module-attribute
¶
一个必须指向文件的路径。
from pathlib import Path
from pydantic import BaseModel, FilePath, ValidationError
class Model(BaseModel):
f: FilePath
path = Path('text.txt')
path.touch()
m = Model(f='text.txt')
print(m.model_dump())
#> {'f': PosixPath('text.txt')}
path.unlink()
path = Path('directory')
path.mkdir(exist_ok=True)
try:
Model(f='directory') # directory
except ValidationError as e:
print(e)
'''
1 validation error for Model
f
Path does not point to a file [type=path_not_file, input_value='directory', input_type=str]
'''
path.rmdir()
try:
Model(f='not-exists-file')
except ValidationError as e:
print(e)
'''
1 validation error for Model
f
Path does not point to a file [type=path_not_file, input_value='not-exists-file', input_type=str]
'''
DirectoryPath module-attribute
¶
一个必须指向目录的路径。
from pathlib import Path
from pydantic import BaseModel, DirectoryPath, ValidationError
class Model(BaseModel):
f: DirectoryPath
path = Path('directory/')
path.mkdir()
m = Model(f='directory/')
print(m.model_dump())
#> {'f': PosixPath('directory')}
path.rmdir()
path = Path('file.txt')
path.touch()
try:
Model(f='file.txt') # file
except ValidationError as e:
print(e)
'''
1 validation error for Model
f
Path does not point to a directory [type=path_not_directory, input_value='file.txt', input_type=str]
'''
path.unlink()
try:
Model(f='not-exists-directory')
except ValidationError as e:
print(e)
'''
1 validation error for Model
f
Path does not point to a directory [type=path_not_directory, input_value='not-exists-directory', input_type=str]
'''
NewPath module-attribute
¶
一个用于新文件或目录的路径,该路径必须尚不存在。父目录必须已存在。
Base64Bytes module-attribute
¶
Base64Bytes = Annotated[
bytes, EncodedBytes(encoder=Base64Encoder)
]
一种字节串类型,使用标准(非 URL 安全)base64 编码器进行编码和解码。
注意
在底层,Base64Bytes
使用标准库 base64.b64encode
和 base64.b64decode
函数。
因此,尝试使用 Base64Bytes
类型解码 URL 安全的 base64 数据可能会失败或产生不正确的解码。
警告
在 Pydantic v2.10 之前的版本中,Base64Bytes
使用 base64.encodebytes
和 base64.decodebytes
函数。根据 base64 文档,这些方法被认为是过时的实现,因此,Pydantic v2.10+ 现在使用现代的 base64.b64encode
和 base64.b64decode
函数。
如果您仍然想使用这些过时的编码器/解码器,您可以通过创建一个自定义的注解类型来实现,如下所示
import base64
from typing import Annotated, Literal
from pydantic_core import PydanticCustomError
from pydantic import EncodedBytes, EncoderProtocol
class LegacyBase64Encoder(EncoderProtocol):
@classmethod
def decode(cls, data: bytes) -> bytes:
try:
return base64.decodebytes(data)
except ValueError as e:
raise PydanticCustomError(
'base64_decode',
"Base64 decoding error: '{error}'",
{'error': str(e)},
)
@classmethod
def encode(cls, value: bytes) -> bytes:
return base64.encodebytes(value)
@classmethod
def get_json_format(cls) -> Literal['base64']:
return 'base64'
LegacyBase64Bytes = Annotated[bytes, EncodedBytes(encoder=LegacyBase64Encoder)]
from pydantic import Base64Bytes, BaseModel, ValidationError
class Model(BaseModel):
base64_bytes: Base64Bytes
# Initialize the model with base64 data
m = Model(base64_bytes=b'VGhpcyBpcyB0aGUgd2F5')
# Access decoded value
print(m.base64_bytes)
#> b'This is the way'
# Serialize into the base64 form
print(m.model_dump())
#> {'base64_bytes': b'VGhpcyBpcyB0aGUgd2F5'}
# Validate base64 data
try:
print(Model(base64_bytes=b'undecodable').base64_bytes)
except ValidationError as e:
print(e)
'''
1 validation error for Model
base64_bytes
Base64 decoding error: 'Incorrect padding' [type=base64_decode, input_value=b'undecodable', input_type=bytes]
'''
Base64Str module-attribute
¶
Base64Str = Annotated[
str, EncodedStr(encoder=Base64Encoder)
]
一种字符串类型,使用标准(非 URL 安全)base64 编码器进行编码和解码。
注意
在底层,Base64Str
使用标准库 base64.b64encode
和 base64.b64decode
函数。
因此,尝试使用 Base64Str
类型解码 URL 安全的 base64 数据可能会失败或产生不正确的解码。
警告
在 Pydantic v2.10 之前的版本中,Base64Str
使用 base64.encodebytes
和 base64.decodebytes
函数。根据 base64 文档,这些方法被认为是过时的实现,因此,Pydantic v2.10+ 现在使用现代的 base64.b64encode
和 base64.b64decode
函数。
有关如何使用过时的编码器/解码器复制旧行为的更多信息,请参阅 Base64Bytes
类型。
from pydantic import Base64Str, BaseModel, ValidationError
class Model(BaseModel):
base64_str: Base64Str
# Initialize the model with base64 data
m = Model(base64_str='VGhlc2UgYXJlbid0IHRoZSBkcm9pZHMgeW91J3JlIGxvb2tpbmcgZm9y')
# Access decoded value
print(m.base64_str)
#> These aren't the droids you're looking for
# Serialize into the base64 form
print(m.model_dump())
#> {'base64_str': 'VGhlc2UgYXJlbid0IHRoZSBkcm9pZHMgeW91J3JlIGxvb2tpbmcgZm9y'}
# Validate base64 data
try:
print(Model(base64_str='undecodable').base64_str)
except ValidationError as e:
print(e)
'''
1 validation error for Model
base64_str
Base64 decoding error: 'Incorrect padding' [type=base64_decode, input_value='undecodable', input_type=str]
'''
Base64UrlBytes module-attribute
¶
Base64UrlBytes = Annotated[
bytes, EncodedBytes(encoder=Base64UrlEncoder)
]
一种字节串类型,使用 URL 安全的 base64 编码器进行编码和解码。
注意
在底层,Base64UrlBytes
使用标准库 base64.urlsafe_b64encode
和 base64.urlsafe_b64decode
函数。
因此,Base64UrlBytes
类型可用于忠实地解码“原始”base64 数据(使用 '+'
和 '/'
)。
from pydantic import Base64UrlBytes, BaseModel
class Model(BaseModel):
base64url_bytes: Base64UrlBytes
# Initialize the model with base64 data
m = Model(base64url_bytes=b'SHc_dHc-TXc==')
print(m)
#> base64url_bytes=b'Hw?tw>Mw'
Base64UrlStr module-attribute
¶
Base64UrlStr = Annotated[
str, EncodedStr(encoder=Base64UrlEncoder)
]
一种字符串类型,使用 URL 安全的 base64 编码器进行编码和解码。
注意
在底层,Base64UrlStr
使用标准库 base64.urlsafe_b64encode
和 base64.urlsafe_b64decode
函数。
因此,Base64UrlStr
类型可用于忠实地解码“原始”base64 数据(使用 '+'
和 '/'
)。
from pydantic import Base64UrlStr, BaseModel
class Model(BaseModel):
base64url_str: Base64UrlStr
# Initialize the model with base64 data
m = Model(base64url_str='SHc_dHc-TXc==')
print(m)
#> base64url_str='Hw?tw>Mw'
JsonValue module-attribute
¶
JsonValue: TypeAlias = Union[
list["JsonValue"],
dict[str, "JsonValue"],
str,
bool,
int,
float,
None,
]
JsonValue
用于表示可以序列化为 JSON 的值。
它可以是以下类型之一
list['JsonValue']
dict[str, 'JsonValue']
str
bool
int
float
None
以下示例演示了如何使用 JsonValue
验证 JSON 数据,以及当输入数据不可 JSON 序列化时会发生什么样的错误。
import json
from pydantic import BaseModel, JsonValue, ValidationError
class Model(BaseModel):
j: JsonValue
valid_json_data = {'j': {'a': {'b': {'c': 1, 'd': [2, None]}}}}
invalid_json_data = {'j': {'a': {'b': ...}}}
print(repr(Model.model_validate(valid_json_data)))
#> Model(j={'a': {'b': {'c': 1, 'd': [2, None]}}})
print(repr(Model.model_validate_json(json.dumps(valid_json_data))))
#> Model(j={'a': {'b': {'c': 1, 'd': [2, None]}}})
try:
Model.model_validate(invalid_json_data)
except ValidationError as e:
print(e)
'''
1 validation error for Model
j.dict.a.dict.b
input was not a valid JSON value [type=invalid-json-value, input_value=Ellipsis, input_type=ellipsis]
'''
OnErrorOmit module-attribute
¶
OnErrorOmit = Annotated[T, _OnErrorOmit]
当用作列表中的项、字典中的键类型、TypedDict 的可选值等时,如果验证项时出现任何错误,此注解将从迭代中省略该项。也就是说,不是将 ValidationError
向上传播并丢弃整个可迭代对象,而是丢弃任何无效项并返回有效项。
Strict dataclass
¶
基类: PydanticMetadata
, BaseMetadata
一个字段元数据类,用于指示应以严格模式验证字段。使用此类作为通过 Annotated
的注解,如下所示。
属性
名称 | 类型 | 描述 |
---|---|---|
strict |
bool
|
是否以严格模式验证字段。 |
示例
from typing import Annotated
from pydantic.types import Strict
StrictBool = Annotated[bool, Strict()]
源代码位于 pydantic/types.py
中
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
|
AllowInfNan dataclass
¶
基类: PydanticMetadata
一个字段元数据类,用于指示字段应允许 -inf
、inf
和 nan
。
使用此类作为通过 Annotated
的注解,如下所示。
属性
名称 | 类型 | 描述 |
---|---|---|
allow_inf_nan |
bool
|
是否允许 |
示例
from typing import Annotated
from pydantic.types import AllowInfNan
LaxFloat = Annotated[float, AllowInfNan()]
源代码位于 pydantic/types.py
中
386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 |
|
StringConstraints dataclass
¶
基类: GroupedMetadata
使用文档
一个字段元数据类,用于将约束应用于 str
类型。使用此类作为通过 Annotated
的注解,如下所示。
属性
名称 | 类型 | 描述 |
---|---|---|
strip_whitespace |
bool | None
|
是否删除前导和尾随空格。 |
to_upper |
bool | None
|
是否将字符串转换为大写。 |
to_lower |
bool | None
|
是否将字符串转换为小写。 |
strict |
bool | None
|
是否以严格模式验证字符串。 |
min_length |
int | None
|
字符串的最小长度。 |
max_length |
int | None
|
字符串的最大长度。 |
pattern |
str | Pattern[str] | None
|
字符串必须匹配的正则表达式模式。 |
示例
from typing import Annotated
from pydantic.types import StringConstraints
ConstrainedStr = Annotated[str, StringConstraints(min_length=1, max_length=10)]
源代码位于 pydantic/types.py
中
693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 |
|
ImportString ¶
一种可用于从字符串导入 Python 对象的类型。
ImportString
期望一个字符串,并加载在该点路径上可导入的 Python 对象。模块的属性可以用 :
或 .
与模块分隔,例如,如果提供 'math:cos'
,则生成的字段值将是函数 cos
。如果使用 .
并且在同一路径下同时存在属性和子模块,则模块将被优先选择。
在模型实例化时,指针将被评估和导入。这种行为有一些细微之处,在下面的示例中进行了演示。
import math
from pydantic import BaseModel, Field, ImportString, ValidationError
class ImportThings(BaseModel):
obj: ImportString
# A string value will cause an automatic import
my_cos = ImportThings(obj='math.cos')
# You can use the imported function as you would expect
cos_of_0 = my_cos.obj(0)
assert cos_of_0 == 1
# A string whose value cannot be imported will raise an error
try:
ImportThings(obj='foo.bar')
except ValidationError as e:
print(e)
'''
1 validation error for ImportThings
obj
Invalid python path: No module named 'foo.bar' [type=import_error, input_value='foo.bar', input_type=str]
'''
# Actual python objects can be assigned as well
my_cos = ImportThings(obj=math.cos)
my_cos_2 = ImportThings(obj='math.cos')
my_cos_3 = ImportThings(obj='math:cos')
assert my_cos == my_cos_2 == my_cos_3
# You can set default field value either as Python object:
class ImportThingsDefaultPyObj(BaseModel):
obj: ImportString = math.cos
# or as a string value (but only if used with `validate_default=True`)
class ImportThingsDefaultString(BaseModel):
obj: ImportString = Field(default='math.cos', validate_default=True)
my_cos_default1 = ImportThingsDefaultPyObj()
my_cos_default2 = ImportThingsDefaultString()
assert my_cos_default1.obj == my_cos_default2.obj == math.cos
# note: this will not work!
class ImportThingsMissingValidateDefault(BaseModel):
obj: ImportString = 'math.cos'
my_cos_default3 = ImportThingsMissingValidateDefault()
assert my_cos_default3.obj == 'math.cos' # just string, not evaluated
将 ImportString
类型序列化为 json 也是可能的。
from pydantic import BaseModel, ImportString
class ImportThings(BaseModel):
obj: ImportString
# Create an instance
m = ImportThings(obj='math.cos')
print(m)
#> obj=<built-in function cos>
print(m.model_dump_json())
#> {"obj":"math.cos"}
源代码位于 pydantic/types.py
中
913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 |
|
UuidVersion dataclass
¶
一个字段元数据类,用于指示 UUID 版本。
使用此类作为通过 Annotated
的注解,如下所示。
属性
名称 | 类型 | 描述 |
---|---|---|
uuid_version |
Literal[1, 3, 4, 5, 6, 7, 8]
|
UUID 的版本。必须是 1、3、4、5 或 7 之一。 |
示例
from typing import Annotated
from uuid import UUID
from pydantic.types import UuidVersion
UUID1 = Annotated[UUID, UuidVersion(1)]
源代码位于 pydantic/types.py
中
1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 |
|
Json ¶
一个特殊的类型包装器,在解析之前加载 JSON。
您可以使用 Json
数据类型,使 Pydantic 首先加载原始 JSON 字符串,然后再将加载的数据验证为参数化类型
from typing import Any
from pydantic import BaseModel, Json, ValidationError
class AnyJsonModel(BaseModel):
json_obj: Json[Any]
class ConstrainedJsonModel(BaseModel):
json_obj: Json[list[int]]
print(AnyJsonModel(json_obj='{"b": 1}'))
#> json_obj={'b': 1}
print(ConstrainedJsonModel(json_obj='[1, 2, 3]'))
#> json_obj=[1, 2, 3]
try:
ConstrainedJsonModel(json_obj=12)
except ValidationError as e:
print(e)
'''
1 validation error for ConstrainedJsonModel
json_obj
JSON input should be string, bytes or bytearray [type=json_type, input_value=12, input_type=int]
'''
try:
ConstrainedJsonModel(json_obj='[a, b]')
except ValidationError as e:
print(e)
'''
1 validation error for ConstrainedJsonModel
json_obj
Invalid JSON: expected value at line 1 column 2 [type=json_invalid, input_value='[a, b]', input_type=str]
'''
try:
ConstrainedJsonModel(json_obj='["a", "b"]')
except ValidationError as e:
print(e)
'''
2 validation errors for ConstrainedJsonModel
json_obj.0
Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='a', input_type=str]
json_obj.1
Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='b', input_type=str]
'''
当您使用 model_dump
或 model_dump_json
转储模型时,转储的值将是验证的结果,而不是原始 JSON 字符串。但是,您可以使用参数 round_trip=True
来取回原始 JSON 字符串
from pydantic import BaseModel, Json
class ConstrainedJsonModel(BaseModel):
json_obj: Json[list[int]]
print(ConstrainedJsonModel(json_obj='[1, 2, 3]').model_dump_json())
#> {"json_obj":[1,2,3]}
print(
ConstrainedJsonModel(json_obj='[1, 2, 3]').model_dump_json(round_trip=True)
)
#> {"json_obj":"[1,2,3]"}
源代码位于 pydantic/types.py
中
1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 |
|
Secret ¶
基类: _SecretBase[SecretType]
一个泛型基类,用于定义包含敏感信息的字段,您不希望这些信息在日志记录或回溯中可见。
您可以直接使用类型参数化 Secret
,或者从使用参数化类型的 Secret
中子类化。子类化的好处是您可以定义自定义的 _display
方法,该方法将用于 repr()
和 str()
方法。下面的示例演示了使用 Secret
创建新 secret 类型的两种方法。
- 直接使用类型参数化
Secret
from pydantic import BaseModel, Secret
SecretBool = Secret[bool]
class Model(BaseModel):
secret_bool: SecretBool
m = Model(secret_bool=True)
print(m.model_dump())
#> {'secret_bool': Secret('**********')}
print(m.model_dump_json())
#> {"secret_bool":"**********"}
print(m.secret_bool.get_secret_value())
#> True
- 从参数化
Secret
子类化
from datetime import date
from pydantic import BaseModel, Secret
class SecretDate(Secret[date]):
def _display(self) -> str:
return '****/**/**'
class Model(BaseModel):
secret_date: SecretDate
m = Model(secret_date=date(2022, 1, 1))
print(m.model_dump())
#> {'secret_date': SecretDate('****/**/**')}
print(m.model_dump_json())
#> {"secret_date":"****/**/**"}
print(m.secret_date.get_secret_value())
#> 2022-01-01
_display
方法返回的值将用于 repr()
和 str()
。
您可以通过注解对底层类型强制执行约束:例如
from typing import Annotated
from pydantic import BaseModel, Field, Secret, ValidationError
SecretPosInt = Secret[Annotated[int, Field(gt=0, strict=True)]]
class Model(BaseModel):
sensitive_int: SecretPosInt
m = Model(sensitive_int=42)
print(m.model_dump())
#> {'sensitive_int': Secret('**********')}
try:
m = Model(sensitive_int=-42) # (1)!
except ValidationError as exc_info:
print(exc_info.errors(include_url=False, include_input=False))
'''
[
{
'type': 'greater_than',
'loc': ('sensitive_int',),
'msg': 'Input should be greater than 0',
'ctx': {'gt': 0},
}
]
'''
try:
m = Model(sensitive_int='42') # (2)!
except ValidationError as exc_info:
print(exc_info.errors(include_url=False, include_input=False))
'''
[
{
'type': 'int_type',
'loc': ('sensitive_int',),
'msg': 'Input should be a valid integer',
}
]
'''
- 输入值不大于 0,因此会引发验证错误。
- 输入值不是整数,因此会引发验证错误,因为
SecretPosInt
类型启用了严格模式。
源代码位于 pydantic/types.py
中
1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 |
|
SecretStr ¶
基类: _SecretField[str]
一个用于存储敏感信息的字符串,您不希望这些信息在日志记录或回溯中可见。
当 secret 值非空时,在调用 repr()
和 str()
时,它会显示为 '**********'
而不是底层值。如果该值为空,则显示为 ''
。
from pydantic import BaseModel, SecretStr
class User(BaseModel):
username: str
password: SecretStr
user = User(username='scolvin', password='password1')
print(user)
#> username='scolvin' password=SecretStr('**********')
print(user.password.get_secret_value())
#> password1
print((SecretStr('password'), SecretStr('')))
#> (SecretStr('**********'), SecretStr(''))
如上所示,默认情况下,SecretStr
(和 SecretBytes
)将被序列化为 **********
当序列化为 json 时。
您可以使用 field_serializer
在序列化为 json 时将 secret 转储为纯文本。
from pydantic import BaseModel, SecretBytes, SecretStr, field_serializer
class Model(BaseModel):
password: SecretStr
password_bytes: SecretBytes
@field_serializer('password', 'password_bytes', when_used='json')
def dump_secret(self, v):
return v.get_secret_value()
model = Model(password='IAmSensitive', password_bytes=b'IAmSensitiveBytes')
print(model)
#> password=SecretStr('**********') password_bytes=SecretBytes(b'**********')
print(model.password)
#> **********
print(model.model_dump())
'''
{
'password': SecretStr('**********'),
'password_bytes': SecretBytes(b'**********'),
}
'''
print(model.model_dump_json())
#> {"password":"IAmSensitive","password_bytes":"IAmSensitiveBytes"}
源代码位于 pydantic/types.py
中
1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 |
|
SecretBytes ¶
基类: _SecretField[bytes]
一个用于存储敏感信息的字节串,您不希望这些信息在日志记录或回溯中可见。
在 repr()
和 str()
调用时,它会显示 b'**********'
而不是字符串值。当 secret 值非空时,在调用 repr()
和 str()
时,它会显示为 b'**********'
而不是底层值。如果该值为空,则显示为 b''
。
from pydantic import BaseModel, SecretBytes
class User(BaseModel):
username: str
password: SecretBytes
user = User(username='scolvin', password=b'password1')
#> username='scolvin' password=SecretBytes(b'**********')
print(user.password.get_secret_value())
#> b'password1'
print((SecretBytes(b'password'), SecretBytes(b'')))
#> (SecretBytes(b'**********'), SecretBytes(b''))
源代码位于 pydantic/types.py
中
1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 |
|
PaymentCardNumber ¶
基类: str
基于:https://en.wikipedia.org/wiki/Payment_card_number。
源代码位于 pydantic/types.py
中
1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 |
|
validate classmethod
¶
validate(
input_value: str, /, _: ValidationInfo
) -> PaymentCardNumber
验证卡号并返回一个 PaymentCardNumber
实例。
源代码位于 pydantic/types.py
中
1952 1953 1954 1955 |
|
validate_digits classmethod
¶
validate_digits(card_number: str) -> None
验证卡号是否全部为数字。
源代码位于 pydantic/types.py
中
1967 1968 1969 1970 1971 |
|
validate_luhn_check_digit classmethod
¶
基于:https://en.wikipedia.org/wiki/Luhn_algorithm。
源代码位于 pydantic/types.py
中
1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 |
|
validate_brand staticmethod
¶
validate_brand(card_number: str) -> PaymentCardBrand
基于主要品牌的 BIN 验证长度:https://en.wikipedia.org/wiki/Payment_card_number#Issuer_identification_number_(IIN)。
源代码位于 pydantic/types.py
中
1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 |
|
ByteSize ¶
基类: int
将表示字节数和单位的字符串(例如 '1KB'
或 '11.5MiB'
)转换为整数。
您可以使用 ByteSize
数据类型(不区分大小写)将字节数的字符串表示形式转换为整数,还可以打印输出表示字节数的人类可读字符串。
根据 IEC 80000-13 标准,我们将 '1KB'
解释为 1000 字节,将 '1KiB'
解释为 1024 字节。一般来说,包含中间的 'i'
将导致单位被解释为 2 的幂,而不是 10 的幂(因此,例如,'1 MB'
被视为 1_000_000
字节,而 '1 MiB'
被视为 1_048_576
字节)。
信息
请注意,1b
将被解析为 “1 字节” 而不是 “1 比特”。
from pydantic import BaseModel, ByteSize
class MyModel(BaseModel):
size: ByteSize
print(MyModel(size=52000).size)
#> 52000
print(MyModel(size='3000 KiB').size)
#> 3072000
m = MyModel(size='50 PB')
print(m.size.human_readable())
#> 44.4PiB
print(m.size.human_readable(decimal=True))
#> 50.0PB
print(m.size.human_readable(separator=' '))
#> 44.4 PiB
print(m.size.to('TiB'))
#> 45474.73508864641
源代码位于 pydantic/types.py
中
2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 |
|
human_readable ¶
将字节大小转换为人类可读的字符串。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
decimal
|
bool
|
如果为 True,则使用十进制单位(例如,每 KB 1000 字节)。如果为 False,则使用二进制单位(例如,每 KiB 1024 字节)。 |
False
|
separator
|
str
|
用于分隔值和单位的字符串。默认为空字符串 (``)。 |
''
|
返回
类型 | 描述 |
---|---|
str
|
字节大小的人类可读字符串表示形式。 |
源代码位于 pydantic/types.py
中
2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 |
|
to ¶
将字节大小转换为另一个单位,包括字节和比特单位。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
unit
|
str
|
要转换成的单位。必须是以下之一:B、KB、MB、GB、TB、PB、EB、KiB、MiB、GiB、TiB、PiB、EiB(字节单位)和 bit、kbit、mbit、gbit、tbit、pbit、ebit、kibit、mibit、gibit、tibit、pibit、eibit(比特单位)。 |
required |
返回
类型 | 描述 |
---|---|
float
|
新单位的字节大小。 |
源代码位于 pydantic/types.py
中
2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 |
|
PastDate ¶
过去的日期。
源代码位于 pydantic/types.py
中
2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 |
|
FutureDate ¶
将来的日期。
源代码位于 pydantic/types.py
中
2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 |
|
AwareDatetime ¶
需要时区信息的日期时间。
源代码位于 pydantic/types.py
中
2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 |
|
NaiveDatetime ¶
不需要时区信息的日期时间。
源代码位于 pydantic/types.py
中
2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 |
|
PastDatetime ¶
必须是过去的日期时间。
源代码位于 pydantic/types.py
中
2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 |
|
FutureDatetime ¶
必须是未来的日期时间。
源代码位于 pydantic/types.py
中
2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 |
|
EncoderProtocol ¶
基类: Protocol
用于编码和解码数据为字节的协议。
源代码位于 pydantic/types.py
中
2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 |
|
decode classmethod
¶
使用编码器解码数据。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
data
|
bytes
|
要解码的数据。 |
required |
返回
类型 | 描述 |
---|---|
bytes
|
解码后的数据。 |
源代码位于 pydantic/types.py
中
2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 |
|
encode classmethod
¶
使用编码器编码数据。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
value
|
bytes
|
要编码的数据。 |
required |
返回
类型 | 描述 |
---|---|
bytes
|
编码后的数据。 |
源代码位于 pydantic/types.py
中
2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 |
|
get_json_format classmethod
¶
get_json_format() -> str
获取编码数据的 JSON 格式。
返回
类型 | 描述 |
---|---|
str
|
编码数据的 JSON 格式。 |
源代码位于 pydantic/types.py
中
2386 2387 2388 2389 2390 2391 2392 2393 |
|
Base64Encoder ¶
基类: EncoderProtocol
标准(非 URL 安全)Base64 编码器。
源代码位于 pydantic/types.py
中
2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 |
|
decode classmethod
¶
将 base64 编码的字节数据解码为原始字节数据。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
data
|
bytes
|
要解码的数据。 |
required |
返回
类型 | 描述 |
---|---|
bytes
|
解码后的数据。 |
源代码位于 pydantic/types.py
中
2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 |
|
encode classmethod
¶
将字节数据编码为 base64 编码的字节数据。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
value
|
bytes
|
要编码的数据。 |
required |
返回
类型 | 描述 |
---|---|
bytes
|
编码后的数据。 |
源代码位于 pydantic/types.py
中
2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 |
|
get_json_format classmethod
¶
get_json_format() -> Literal['base64']
获取编码数据的 JSON 格式。
返回
类型 | 描述 |
---|---|
Literal['base64']
|
编码数据的 JSON 格式。 |
源代码位于 pydantic/types.py
中
2426 2427 2428 2429 2430 2431 2432 2433 |
|
Base64UrlEncoder ¶
基类: EncoderProtocol
URL 安全的 Base64 编码器。
源代码位于 pydantic/types.py
中
2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 |
|
decode classmethod
¶
将 base64 编码的字节数据解码为原始字节数据。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
data
|
bytes
|
要解码的数据。 |
required |
返回
类型 | 描述 |
---|---|
bytes
|
解码后的数据。 |
源代码位于 pydantic/types.py
中
2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 |
|
encode classmethod
¶
将字节数据编码为 base64 编码的字节数据。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
value
|
bytes
|
要编码的数据。 |
required |
返回
类型 | 描述 |
---|---|
bytes
|
编码后的数据。 |
源代码位于 pydantic/types.py
中
2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 |
|
get_json_format classmethod
¶
get_json_format() -> Literal['base64url']
获取编码数据的 JSON 格式。
返回
类型 | 描述 |
---|---|
Literal['base64url']
|
编码数据的 JSON 格式。 |
源代码位于 pydantic/types.py
中
2466 2467 2468 2469 2470 2471 2472 2473 |
|
EncodedBytes dataclass
¶
一种使用指定编码器进行编码和解码的字节类型。
EncodedBytes
需要一个实现 EncoderProtocol
的编码器才能运行。
from typing import Annotated
from pydantic import BaseModel, EncodedBytes, EncoderProtocol, ValidationError
class MyEncoder(EncoderProtocol):
@classmethod
def decode(cls, data: bytes) -> bytes:
if data == b'**undecodable**':
raise ValueError('Cannot decode data')
return data[13:]
@classmethod
def encode(cls, value: bytes) -> bytes:
return b'**encoded**: ' + value
@classmethod
def get_json_format(cls) -> str:
return 'my-encoder'
MyEncodedBytes = Annotated[bytes, EncodedBytes(encoder=MyEncoder)]
class Model(BaseModel):
my_encoded_bytes: MyEncodedBytes
# Initialize the model with encoded data
m = Model(my_encoded_bytes=b'**encoded**: some bytes')
# Access decoded value
print(m.my_encoded_bytes)
#> b'some bytes'
# Serialize into the encoded form
print(m.model_dump())
#> {'my_encoded_bytes': b'**encoded**: some bytes'}
# Validate encoded data
try:
Model(my_encoded_bytes=b'**undecodable**')
except ValidationError as e:
print(e)
'''
1 validation error for Model
my_encoded_bytes
Value error, Cannot decode data [type=value_error, input_value=b'**undecodable**', input_type=bytes]
'''
源代码位于 pydantic/types.py
中
2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 |
|
decode ¶
decode(data: bytes, _: ValidationInfo) -> bytes
使用指定的编码器解码数据。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
data
|
bytes
|
要解码的数据。 |
required |
返回
类型 | 描述 |
---|---|
bytes
|
解码后的数据。 |
源代码位于 pydantic/types.py
中
2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 |
|
encode ¶
使用指定的编码器编码数据。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
value
|
bytes
|
要编码的数据。 |
required |
返回
类型 | 描述 |
---|---|
bytes
|
编码后的数据。 |
源代码位于 pydantic/types.py
中
2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 |
|
EncodedStr dataclass
¶
一种使用指定编码器进行编码和解码的字符串类型。
EncodedStr
需要一个实现 EncoderProtocol
的编码器才能运行。
from typing import Annotated
from pydantic import BaseModel, EncodedStr, EncoderProtocol, ValidationError
class MyEncoder(EncoderProtocol):
@classmethod
def decode(cls, data: bytes) -> bytes:
if data == b'**undecodable**':
raise ValueError('Cannot decode data')
return data[13:]
@classmethod
def encode(cls, value: bytes) -> bytes:
return b'**encoded**: ' + value
@classmethod
def get_json_format(cls) -> str:
return 'my-encoder'
MyEncodedStr = Annotated[str, EncodedStr(encoder=MyEncoder)]
class Model(BaseModel):
my_encoded_str: MyEncodedStr
# Initialize the model with encoded data
m = Model(my_encoded_str='**encoded**: some str')
# Access decoded value
print(m.my_encoded_str)
#> some str
# Serialize into the encoded form
print(m.model_dump())
#> {'my_encoded_str': '**encoded**: some str'}
# Validate encoded data
try:
Model(my_encoded_str='**undecodable**')
except ValidationError as e:
print(e)
'''
1 validation error for Model
my_encoded_str
Value error, Cannot decode data [type=value_error, input_value='**undecodable**', input_type=str]
'''
源代码位于 pydantic/types.py
中
2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 |
|
decode_str ¶
decode_str(data: str, _: ValidationInfo) -> str
使用指定的编码器解码数据。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
data
|
str
|
要解码的数据。 |
required |
返回
类型 | 描述 |
---|---|
str
|
解码后的数据。 |
源代码位于 pydantic/types.py
中
2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 |
|
encode_str ¶
使用指定的编码器编码数据。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
value
|
str
|
要编码的数据。 |
required |
返回
类型 | 描述 |
---|---|
str
|
编码后的数据。 |
源代码位于 pydantic/types.py
中
2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 |
|
GetPydanticSchema dataclass
¶
一个方便的类,用于创建提供 pydantic 自定义类型钩子的注解。
这个类旨在消除创建自定义“标记”的需求,该标记定义了 __get_pydantic_core_schema__
和 __get_pydantic_json_schema__
自定义钩子方法。
例如,要使字段在类型检查器中被视为 int
,但在 pydantic 中被视为 Any
,您可以这样做
from typing import Annotated, Any
from pydantic import BaseModel, GetPydanticSchema
HandleAsAny = GetPydanticSchema(lambda _s, h: h(Any))
class Model(BaseModel):
x: Annotated[int, HandleAsAny] # pydantic sees `x: Any`
print(repr(Model(x='abc').x))
#> 'abc'
源代码位于 pydantic/types.py
中
2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 |
|
Tag dataclass
¶
提供一种方法来指定用于(可调用)可辨别联合的案例的预期标签。
还提供一种在错误消息中标记联合案例的方法。
当使用可调用的 Discriminator
时,将 Tag
附加到 Union
中的每个案例,以指定应用于标识该案例的标签。例如,在下面的示例中,Tag
用于指定如果 get_discriminator_value
返回 'apple'
,则输入应验证为 ApplePie
,如果返回 'pumpkin'
,则输入应验证为 PumpkinPie
。
Tag
的主要作用是将可调用 Discriminator
函数的返回值映射到相关 Union
的适当成员。
from typing import Annotated, Any, Literal, Union
from pydantic import BaseModel, Discriminator, Tag
class Pie(BaseModel):
time_to_cook: int
num_ingredients: int
class ApplePie(Pie):
fruit: Literal['apple'] = 'apple'
class PumpkinPie(Pie):
filling: Literal['pumpkin'] = 'pumpkin'
def get_discriminator_value(v: Any) -> str:
if isinstance(v, dict):
return v.get('fruit', v.get('filling'))
return getattr(v, 'fruit', getattr(v, 'filling', None))
class ThanksgivingDinner(BaseModel):
dessert: Annotated[
Union[
Annotated[ApplePie, Tag('apple')],
Annotated[PumpkinPie, Tag('pumpkin')],
],
Discriminator(get_discriminator_value),
]
apple_variation = ThanksgivingDinner.model_validate(
{'dessert': {'fruit': 'apple', 'time_to_cook': 60, 'num_ingredients': 8}}
)
print(repr(apple_variation))
'''
ThanksgivingDinner(dessert=ApplePie(time_to_cook=60, num_ingredients=8, fruit='apple'))
'''
pumpkin_variation = ThanksgivingDinner.model_validate(
{
'dessert': {
'filling': 'pumpkin',
'time_to_cook': 40,
'num_ingredients': 6,
}
}
)
print(repr(pumpkin_variation))
'''
ThanksgivingDinner(dessert=PumpkinPie(time_to_cook=40, num_ingredients=6, filling='pumpkin'))
'''
注意
您必须为与可调用 Discriminator
关联的 Tag
中的每个案例指定 Tag
。 否则将导致 PydanticUserError
,错误代码为 callable-discriminator-no-tag
。
有关如何使用 Tag
的更多详细信息,请参阅 可辨别联合 概念文档。
源代码位于 pydantic/types.py
中
2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 |
|
Discriminator dataclass
¶
提供一种使用自定义可调用对象作为提取联合辨别器值的方法。
这使您可以获得类似于 Field(discriminator=<field_name>)
的验证行为,而无需在所有联合选择中拥有单个共享字段。 这也使得处理模型和原始类型的联合以及可辨别联合风格的验证错误成为可能。 最后,这允许您使用自定义可调用对象作为识别值属于哪个联合成员的方法,同时仍然看到可辨别联合的所有性能优势。
考虑这个例子,与普通的 Union
相比,使用 Discriminator
和 TaggedUnion
的性能更高。
from typing import Annotated, Any, Literal, Union
from pydantic import BaseModel, Discriminator, Tag
class Pie(BaseModel):
time_to_cook: int
num_ingredients: int
class ApplePie(Pie):
fruit: Literal['apple'] = 'apple'
class PumpkinPie(Pie):
filling: Literal['pumpkin'] = 'pumpkin'
def get_discriminator_value(v: Any) -> str:
if isinstance(v, dict):
return v.get('fruit', v.get('filling'))
return getattr(v, 'fruit', getattr(v, 'filling', None))
class ThanksgivingDinner(BaseModel):
dessert: Annotated[
Union[
Annotated[ApplePie, Tag('apple')],
Annotated[PumpkinPie, Tag('pumpkin')],
],
Discriminator(get_discriminator_value),
]
apple_variation = ThanksgivingDinner.model_validate(
{'dessert': {'fruit': 'apple', 'time_to_cook': 60, 'num_ingredients': 8}}
)
print(repr(apple_variation))
'''
ThanksgivingDinner(dessert=ApplePie(time_to_cook=60, num_ingredients=8, fruit='apple'))
'''
pumpkin_variation = ThanksgivingDinner.model_validate(
{
'dessert': {
'filling': 'pumpkin',
'time_to_cook': 40,
'num_ingredients': 6,
}
}
)
print(repr(pumpkin_variation))
'''
ThanksgivingDinner(dessert=PumpkinPie(time_to_cook=40, num_ingredients=6, filling='pumpkin'))
'''
有关如何使用 Discriminator
的更多详细信息,请参阅 可辨别联合 概念文档。
源代码位于 pydantic/types.py
中
2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 |
|
discriminator instance-attribute
¶
用于辨别标记联合中类型的可调用对象或字段名称。
Callable
辨别器必须从输入中提取辨别器的值。 str
辨别器必须是要辨别的字段的名称。
custom_error_type class-attribute
instance-attribute
¶
custom_error_type: str | None = None
在 自定义错误 中使用的类型,用于替换标准的可辨别联合验证错误。
FailFast dataclass
¶
基类: PydanticMetadata
, BaseMetadata
FailFast
注解可用于指定验证应在第一个错误处停止。
当您想要验证大量数据并且只需要知道它是否有效时,这可能很有用。
如果您想更快地验证数据,您可能需要启用此设置(基本上,如果您使用此设置,验证性能会更高,但缺点是您获得的信息较少)。
from typing import Annotated
from pydantic import BaseModel, FailFast, ValidationError
class Model(BaseModel):
x: Annotated[list[int], FailFast()]
# This will raise a single error for the first invalid value and stop validation
try:
obj = Model(x=[1, 2, 'a', 4, 5, 'b', 7, 8, 9, 'c'])
except ValidationError as e:
print(e)
'''
1 validation error for Model
x.2
Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='a', input_type=str]
'''
源代码位于 pydantic/types.py
中
3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 |
|
conint ¶
conint(
*,
strict: bool | None = None,
gt: int | None = None,
ge: int | None = None,
lt: int | None = None,
le: int | None = None,
multiple_of: int | None = None
) -> type[int]
不推荐使用
不推荐使用此函数,建议使用带有 Field
的 Annotated
代替。
此函数将在 Pydantic 3.0 中弃用。
原因是 conint
返回一个类型,这与静态分析工具不太兼容。
from pydantic import BaseModel, conint
class Foo(BaseModel):
bar: conint(strict=True, gt=0)
from typing import Annotated
from pydantic import BaseModel, Field
class Foo(BaseModel):
bar: Annotated[int, Field(strict=True, gt=0)]
int
的包装器,允许额外的约束。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
strict
|
bool | None
|
是否以严格模式验证整数。 默认为 |
None
|
gt
|
int | None
|
值必须大于此值。 |
None
|
ge
|
int | None
|
值必须大于或等于此值。 |
None
|
lt
|
int | None
|
值必须小于此值。 |
None
|
le
|
int | None
|
值必须小于或等于此值。 |
None
|
multiple_of
|
int | None
|
值必须是此值的倍数。 |
None
|
返回
类型 | 描述 |
---|---|
type[int]
|
包装的整数类型。 |
from pydantic import BaseModel, ValidationError, conint
class ConstrainedExample(BaseModel):
constrained_int: conint(gt=1)
m = ConstrainedExample(constrained_int=2)
print(repr(m))
#> ConstrainedExample(constrained_int=2)
try:
ConstrainedExample(constrained_int=0)
except ValidationError as e:
print(e.errors())
'''
[
{
'type': 'greater_than',
'loc': ('constrained_int',),
'msg': 'Input should be greater than 1',
'input': 0,
'ctx': {'gt': 1},
'url': 'https://errors.pydantic.dev/2/v/greater_than',
}
]
'''
源代码位于 pydantic/types.py
中
151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 |
|
confloat ¶
confloat(
*,
strict: bool | None = None,
gt: float | None = None,
ge: float | None = None,
lt: float | None = None,
le: float | None = None,
multiple_of: float | None = None,
allow_inf_nan: bool | None = None
) -> type[float]
不推荐使用
不推荐使用此函数,建议使用带有 Field
的 Annotated
代替。
此函数将在 Pydantic 3.0 中弃用。
原因是 confloat
返回一个类型,这与静态分析工具不太兼容。
from pydantic import BaseModel, confloat
class Foo(BaseModel):
bar: confloat(strict=True, gt=0)
from typing import Annotated
from pydantic import BaseModel, Field
class Foo(BaseModel):
bar: Annotated[float, Field(strict=True, gt=0)]
float
的包装器,允许额外的约束。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
strict
|
bool | None
|
是否以严格模式验证浮点数。 |
None
|
gt
|
float | None
|
值必须大于此值。 |
None
|
ge
|
float | None
|
值必须大于或等于此值。 |
None
|
lt
|
float | None
|
值必须小于此值。 |
None
|
le
|
float | None
|
值必须小于或等于此值。 |
None
|
multiple_of
|
float | None
|
值必须是此值的倍数。 |
None
|
allow_inf_nan
|
bool | None
|
是否允许 |
None
|
返回
类型 | 描述 |
---|---|
type[float]
|
包装的浮点数类型。 |
from pydantic import BaseModel, ValidationError, confloat
class ConstrainedExample(BaseModel):
constrained_float: confloat(gt=1.0)
m = ConstrainedExample(constrained_float=1.1)
print(repr(m))
#> ConstrainedExample(constrained_float=1.1)
try:
ConstrainedExample(constrained_float=0.9)
except ValidationError as e:
print(e.errors())
'''
[
{
'type': 'greater_than',
'loc': ('constrained_float',),
'msg': 'Input should be greater than 1',
'input': 0.9,
'ctx': {'gt': 1.0},
'url': 'https://errors.pydantic.dev/2/v/greater_than',
}
]
'''
源代码位于 pydantic/types.py
中
411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 |
|
conbytes ¶
conbytes(
*,
min_length: int | None = None,
max_length: int | None = None,
strict: bool | None = None
) -> type[bytes]
bytes
的包装器,允许额外的约束。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
min_length
|
int | None
|
字节的最小长度。 |
None
|
max_length
|
int | None
|
字节的最大长度。 |
None
|
strict
|
bool | None
|
是否以严格模式验证字节。 |
None
|
返回
类型 | 描述 |
---|---|
type[bytes]
|
包装的字节类型。 |
源代码位于 pydantic/types.py
中
663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 |
|
constr ¶
constr(
*,
strip_whitespace: bool | None = None,
to_upper: bool | None = None,
to_lower: bool | None = None,
strict: bool | None = None,
min_length: int | None = None,
max_length: int | None = None,
pattern: str | Pattern[str] | None = None
) -> type[str]
不推荐使用
不推荐使用此函数,建议使用带有 StringConstraints
的 Annotated
代替。
此函数将在 Pydantic 3.0 中弃用。
原因是 constr
返回一个类型,这与静态分析工具不太兼容。
from pydantic import BaseModel, constr
class Foo(BaseModel):
bar: constr(strip_whitespace=True, to_upper=True, pattern=r'^[A-Z]+$')
from typing import Annotated
from pydantic import BaseModel, StringConstraints
class Foo(BaseModel):
bar: Annotated[
str,
StringConstraints(
strip_whitespace=True, to_upper=True, pattern=r'^[A-Z]+$'
),
]
str
的包装器,允许额外的约束。
from pydantic import BaseModel, constr
class Foo(BaseModel):
bar: constr(strip_whitespace=True, to_upper=True)
foo = Foo(bar=' hello ')
print(foo)
#> bar='HELLO'
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
strip_whitespace
|
bool | None
|
是否删除前导和尾随空格。 |
None
|
to_upper
|
bool | None
|
是否将所有字符转换为大写。 |
None
|
to_lower
|
bool | None
|
是否将所有字符转换为小写。 |
None
|
strict
|
bool | None
|
是否以严格模式验证字符串。 |
None
|
min_length
|
int | None
|
字符串的最小长度。 |
None
|
max_length
|
int | None
|
字符串的最大长度。 |
None
|
pattern
|
str | Pattern[str] | None
|
用于验证字符串的正则表达式模式。 |
None
|
返回
类型 | 描述 |
---|---|
type[str]
|
包装的字符串类型。 |
源代码位于 pydantic/types.py
中
749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 |
|
conset ¶
conset(
item_type: type[HashableItemType],
*,
min_length: int | None = None,
max_length: int | None = None
) -> type[set[HashableItemType]]
typing.Set
的包装器,允许额外的约束。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
item_type
|
type[HashableItemType]
|
集合中项目的类型。 |
required |
min_length
|
int | None
|
集合的最小长度。 |
None
|
max_length
|
int | None
|
集合的最大长度。 |
None
|
返回
类型 | 描述 |
---|---|
type[set[HashableItemType]]
|
包装的集合类型。 |
源代码位于 pydantic/types.py
中
839 840 841 842 843 844 845 846 847 848 849 850 851 852 |
|
confrozenset ¶
confrozenset(
item_type: type[HashableItemType],
*,
min_length: int | None = None,
max_length: int | None = None
) -> type[frozenset[HashableItemType]]
typing.FrozenSet
的包装器,允许额外的约束。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
item_type
|
type[HashableItemType]
|
frozenset 中项目的类型。 |
required |
min_length
|
int | None
|
frozenset 的最小长度。 |
None
|
max_length
|
int | None
|
frozenset 的最大长度。 |
None
|
返回
类型 | 描述 |
---|---|
type[frozenset[HashableItemType]]
|
包装的 frozenset 类型。 |
源代码位于 pydantic/types.py
中
855 856 857 858 859 860 861 862 863 864 865 866 867 868 |
|
conlist ¶
conlist(
item_type: type[AnyItemType],
*,
min_length: int | None = None,
max_length: int | None = None,
unique_items: bool | None = None
) -> type[list[AnyItemType]]
list
的包装器,添加了验证功能。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
item_type
|
type[AnyItemType]
|
列表中项目的类型。 |
required |
min_length
|
int | None
|
列表的最小长度。 默认为 None。 |
None
|
max_length
|
int | None
|
列表的最大长度。 默认为 None。 |
None
|
unique_items
|
bool | None
|
列表中的项目是否必须唯一。 默认为 None。 警告
|
None
|
返回
类型 | 描述 |
---|---|
type[list[AnyItemType]]
|
包装的列表类型。 |
源代码位于 pydantic/types.py
中
874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 |
|
condecimal ¶
condecimal(
*,
strict: bool | None = None,
gt: int | Decimal | None = None,
ge: int | Decimal | None = None,
lt: int | Decimal | None = None,
le: int | Decimal | None = None,
multiple_of: int | Decimal | None = None,
max_digits: int | None = None,
decimal_places: int | None = None,
allow_inf_nan: bool | None = None
) -> type[Decimal]
不推荐使用
不推荐使用此函数,建议使用带有 Field
的 Annotated
代替。
此函数将在 Pydantic 3.0 中弃用。
原因是 condecimal
返回一个类型,这与静态分析工具不太兼容。
from pydantic import BaseModel, condecimal
class Foo(BaseModel):
bar: condecimal(strict=True, allow_inf_nan=True)
from decimal import Decimal
from typing import Annotated
from pydantic import BaseModel, Field
class Foo(BaseModel):
bar: Annotated[Decimal, Field(strict=True, allow_inf_nan=True)]
Decimal 的包装器,添加了验证功能。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
strict
|
bool | None
|
是否以严格模式验证值。 默认为 |
None
|
gt
|
int | Decimal | None
|
值必须大于此值。 默认为 |
None
|
ge
|
int | Decimal | None
|
值必须大于或等于此值。 默认为 |
None
|
lt
|
int | Decimal | None
|
值必须小于此值。 默认为 |
None
|
le
|
int | Decimal | None
|
值必须小于或等于此值。 默认为 |
None
|
multiple_of
|
int | Decimal | None
|
值必须是此值的倍数。 默认为 |
None
|
max_digits
|
int | None
|
最大位数。 默认为 |
None
|
decimal_places
|
int | None
|
小数位数。 默认为 |
None
|
allow_inf_nan
|
bool | None
|
是否允许无穷大和 NaN。 默认为 |
None
|
from decimal import Decimal
from pydantic import BaseModel, ValidationError, condecimal
class ConstrainedExample(BaseModel):
constrained_decimal: condecimal(gt=Decimal('1.0'))
m = ConstrainedExample(constrained_decimal=Decimal('1.1'))
print(repr(m))
#> ConstrainedExample(constrained_decimal=Decimal('1.1'))
try:
ConstrainedExample(constrained_decimal=Decimal('0.9'))
except ValidationError as e:
print(e.errors())
'''
[
{
'type': 'greater_than',
'loc': ('constrained_decimal',),
'msg': 'Input should be greater than 1.0',
'input': Decimal('0.9'),
'ctx': {'gt': Decimal('1.0')},
'url': 'https://errors.pydantic.dev/2/v/greater_than',
}
]
'''
源代码位于 pydantic/types.py
中
1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 |
|
condate ¶
condate(
*,
strict: bool | None = None,
gt: date | None = None,
ge: date | None = None,
lt: date | None = None,
le: date | None = None
) -> type[date]
date 的包装器,添加了约束。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
strict
|
bool | None
|
是否以严格模式验证日期值。 默认为 |
None
|
gt
|
date | None
|
值必须大于此值。 默认为 |
None
|
ge
|
date | None
|
值必须大于或等于此值。 默认为 |
None
|
lt
|
date | None
|
值必须小于此值。 默认为 |
None
|
le
|
date | None
|
值必须小于或等于此值。 默认为 |
None
|
返回
类型 | 描述 |
---|---|
type[date]
|
具有指定约束的日期类型。 |
源代码位于 pydantic/types.py
中
2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 |
|