本文目录导读:

是的,Pydantic 的 UUID 验证支持指定版本。
Pydantic 提供了 UUID 类型(对应 Python 的 uuid.UUID),并且可以通过以下几种方式验证 UUID 的版本:
使用 UUID 类型(验证任意版本)
from pydantic import BaseModel
from uuid import UUID
class Model(BaseModel):
id: UUID
# 所有版本都接受
m = Model(id="550e8400-e29b-41d4-a716-446655440000") # UUID v1
m = Model(id="6ba7b810-9dad-11d1-80b4-00c04fd430c8") # UUID v1
m = Model(id="f47ac10b-58cc-4372-a567-0e02b2c3d479") # UUID v4
使用 constr 格式验证(正则表达式)
from pydantic import BaseModel, constr
import re
# 只接受 UUID v4
UUID_V4_PATTERN = r'^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$'
class Model(BaseModel):
id: constr(pattern=UUID_V4_PATTERN)
m = Model(id="f47ac10b-58cc-4372-a567-0e02b2c3d479") # UUID v4 ✓
# m = Model(id="550e8400-e29b-41d4-a716-446655440000") # UUID v1 ✗ (会报错)
使用自定义验证器
from pydantic import BaseModel, field_validator
from uuid import UUID
class Model(BaseModel):
id: UUID
@field_validator('id')
@classmethod
def check_uuid_version(cls, v: UUID) -> UUID:
# v.version 返回 UUID 的版本号 (1-5)
if v.version != 4: # 只接受 UUID v4
raise ValueError(f'Only UUID v4 is allowed, got v{v.version}')
return v
# 测试
try:
m = Model(id="550e8400-e29b-41d4-a716-446655440000") # UUID v1 - 会报错
except ValueError as e:
print(f"Error: {e}")
m = Model(id="f47ac10b-58cc-4372-a567-0e02b2c3d479") # UUID v4 - 成功
使用 Pydantic v2 的 AfterValidator(更简洁)
from pydantic import BaseModel, AfterValidator
from typing import Annotated
from uuid import UUID
def uuid_v4_only(v: UUID) -> UUID:
if v.version != 4:
raise ValueError(f'Only UUID v4 is allowed, got v{v.version}')
return v
UUIDv4 = Annotated[UUID, AfterValidator(uuid_v4_only)]
class Model(BaseModel):
id: UUIDv4
m = Model(id="f47ac10b-58cc-4372-a567-0e02b2c3d479") # ✓
UUID 版本说明
- v1: 基于时间戳和 MAC 地址
- v2: DCE 安全版本
- v3: 基于命名空间和名称的 MD5 哈希
- v4: 随机生成(最常用)
- v5: 基于命名空间和名称的 SHA-1 哈希
Pydantic 的 UUID 类型本身不限制版本,但你可以通过正则表达式、自定义验证器或 AfterValidator 来强制验证特定的 UUID 版本。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播