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)  # 返回验证后的字典

新版本的简洁性主要体现在:

  1. 声明式语法:用类属性定义 Schema,非常清晰。
  2. 内置常用校验required, default, pattern, validator 等参数开箱即用。
  3. Model 实例化:直接传入字典就能创建对象并验证,数据变成了对象属性,用起来更自然。
  4. 方便的序列化to_dict() 方法一键转回字典。

相比一些传统库,Validr-1.0 的 Model Class 减少了样板代码,让数据验证和模型定义更 Pythonic。

一句话建议:用 Model Class 替代手写字典校验能让代码更干净。

回到顶部