Validr-1.0 发布,Python中如何使用更简洁的 Schema 以及全新的 Model Class
Validr - 简单,快速,可拓展的数据校验库
- 简洁,易读的 Schema
- 比 jsonschema 快 10 倍,比 schematics 快 40 倍
- 能够校验&序列化任意类型对象
- 易于拓展自定义校验器
- 准确友好的错误提示
安装
Note: 支持 python 3.4+
pip install 'validr>=1.0.0'
概览
from validr import T, modelclass, asdict
@modelclass
class Model:
“”“Base Model”""
class Person(Model):
name = T.str.maxlen(16).desc(‘at most 16 chars’)
website = T.url.optional.desc(‘website is optional’)
guyskk = Person(name=‘guyskk’, website=‘https://github.com/guyskk’)
print(asdict(guyskk))
更多详情
项目地址: https://github.com/guyskk/validr/
文档地址: https://github.com/guyskk/validr/wiki
Validr-1.0 发布,Python中如何使用更简洁的 Schema 以及全新的 Model Class
1 回复
Validr-1.0 的发布确实为 Python 的数据验证和序列化带来了更简洁的语法。新的 Model Class 设计让定义和使用 Schema 变得非常直观。
核心用法是定义一个继承自 validr.Model 的类,并使用 Field 来声明字段。下面是一个完整的例子:
from validr import Model, Field, Invalid
class User(Model):
# 使用 Field 定义字段,可以指定类型、默认值、校验器等
id = Field(int, required=True)
name = Field(str, default='anonymous')
age = Field(int, validator=lambda x: 0 <= x <= 150)
email = Field(str, pattern=r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$')
# 1. 从字典创建 Model 实例并自动验证
try:
user = User({'id': 1, 'name': 'Alice', 'age': 25, 'email': 'alice@example.com'})
print(user.id) # 1
print(user.name) # Alice
except Invalid as e:
print(f"Validation error: {e}")
# 2. 转换为字典
user_dict = user.to_dict()
print(user_dict) # {'id': 1, 'name': 'Alice', 'age': 25, 'email': 'alice@example.com'}
# 3. 字段访问和修改
user.age = 26
print(user.age) # 26
# 4. 批量更新并验证
user.update({'age': 30, 'email': 'new@example.com'})
# 5. 类本身也可以作为校验器直接使用
validated_data = User.validate({'id': 2, 'age': 30})
print(validated_data) # 返回验证后的字典
新版本的简洁性主要体现在:
- 声明式语法:用类属性定义 Schema,非常清晰。
- 内置常用校验:
required,default,pattern,validator等参数开箱即用。 - Model 实例化:直接传入字典就能创建对象并验证,数据变成了对象属性,用起来更自然。
- 方便的序列化:
to_dict()方法一键转回字典。
相比一些传统库,Validr-1.0 的 Model Class 减少了样板代码,让数据验证和模型定义更 Pythonic。
一句话建议:用 Model Class 替代手写字典校验能让代码更干净。

