自定义验证器示列

要在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="alice@example.com", 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="alice@example.com", 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': 'alice@example.com', 'phone': '13800138000'}
相关推荐
龙腾AI白云12 小时前
大模型Prompt实战:精准生成专业技术文档
plotly·pyqt·fastapi·tornado·dash
星星也在雾里1 天前
Dify Agent + FastAPI + PostgreSQL实现数据库查询
数据库·人工智能·fastapi
曲幽2 天前
FastAPI + Celery 实战:异步任务里调用 Redis 和数据库的全解析,及生产级组织方案
redis·python·fastapi·web·async·celery·task·queue
wggmrlee2 天前
Mac安装Anaconda
python·fastapi
skywalk81632 天前
Kotti Next:使用FastAPI+Vue 3构建的现代无头CMS-Kotti CMS的精神继承者(使用WorkBuddy AI自动编程)
前端·vue.js·人工智能·fastapi·kotti
曲幽2 天前
FastAPI里玩转Redis和数据库的正确姿势,别让异步任务把你坑哭了!
redis·python·mysql·fastapi·web·celery·sqlalchemy·task·backgroundtask
Thomas.Sir3 天前
第五章:RAG知识库开发之【利用RAG知识库实现智能AI系统:从零构建企业级智能问答应用】
人工智能·python·vue·状态模式·fastapi·智能
呱牛do it3 天前
企业级软件研发团队绩效考核系统开发(持续更新 Day 8)
python·fastapi·研发管理
曲幽3 天前
FastAPI + Celery 实战:异步任务的坑与解法,我帮你踩了一遍
redis·python·fastapi·web·async·celery·background·task·queue
I'm Jie3 天前
FastAPI 集成 Redis 开发手册
redis·fastapi