自定义验证器示列

要在Pydantic模型中限制phone字段只接受数字,可以通过自定义验证器来实现。User类包含一个自定义验证器函数,该函数会检查phone字段是否全为数字:

python 复制代码
from pydantic import BaseModel, EmailStr, Field, validator

class User(BaseModel):
    name: str = Field(..., min_length=1, max_length=10)
    age: int = Field(..., ge=0, le=200)
    email: EmailStr
    phone: str = Field(default="13800138000", min_length=11, max_length=11)

    @validator('phone')
    def phone_must_be_digits(cls, value):
        # 检查phone字段是否全部由数字组成
        if not value.isdigit():
            raise ValueError("Phone number must contain only digits.")
        return value

# 测试用例
try:
    user = User(name="Tom", age=22, email="[email protected]", phone='1380013800e')
    data = user.model_dump()
    print("data:",data)
except ValueError as e:
    print("error:",e)  # 这里会打印出错误信息,因为phone字段包含了非数字字符


# 正确用例
try:
    valid_user = User(name="Tom", age=22, email="[email protected]", phone='13800138000')
    valid_data = valid_user.model_dump()
    print("valid_data:",valid_data)
except ValueError as e:
    print("e:",e)

添加了一个名为phone_must_be_digits的验证器装饰器到phone字段。这个验证器会检查字段值是否全为数字,如果不是,则抛出一个ValueError异常。这样,在尝试创建一个User实例时,如果phone字段包含了非数字字符,就会立即得到反馈。

运行结果如下:

python 复制代码
  @validator('phone')
error: 1 validation error for User
phone
  Value error, Phone number must contain only digits. [type=value_error, input_value='1380013800e', input_type=str]
    For further information visit https://errors.pydantic.dev/2.5/v/value_error
valid_data: {'name': 'Tom', 'age': 22, 'email': '[email protected]', 'phone': '13800138000'}
相关推荐
高效匠人8 小时前
FastAPI + Redis Pub/Sub + WebSocket 组合解决方案的详细介绍
redis·websocket·fastapi
Nick_zcy1 天前
开发基于python的商品推荐系统,前端框架和后端框架的选择比较
开发语言·python·前端框架·flask·fastapi
uncle_ll2 天前
FastAPI 零基础入门指南:10 分钟搭建高性能 API
后端·python·微服务·api·fastapi
坐吃山猪2 天前
Python-Agent调用多个Server-FastAPI版本
开发语言·python·fastapi
像风一样自由20204 天前
FastMCP与FastAPI:构建自定义MCP服务器
服务器·microsoft·fastapi
数据智能老司机4 天前
使用 FastAPI 构建生成式 AI 服务——与生成模型的实时通信
llm·openai·fastapi
数据智能老司机4 天前
使用 FastAPI 构建生成式 AI 服务——AI集成与模型服务
llm·openai·fastapi
十分钟空间5 天前
有哪些常用的Python后端开发框架?
python·flask·fastapi
老大白菜6 天前
FastAPI WebSocket 聊天应用详细教程
websocket·网络协议·fastapi
众智创新团队8 天前
Flutter与FastAPI的OSS系统实现
flutter·fastapi·oss