wr-schemas
项目描述
一个模式描述
一种数据结构
一种将一种数据结构映射到另一种数据结构的方式
一个模式由一系列字段组成。
字段没有类型 – 它本身就是一种类型。与类型不同,字段具有双向映射。给定两个不同的数据结构 x 和 y,映射描述了如何从 y.f 计算出 x.f,以及如何从 x.f 计算出 y.f。
字段支持以下属性
名称
映射
默认值
源名称 (source_names)
最小长度,最大长度,自动截断
最小值,最大值
选择项
正则表达式
必需,禁止
可空
此外
支持嵌套字段。
字段易于克隆以重复使用。
字段和模式易于反转。
模式易于链接。
from wr_schemas import Field, Schema, Mappings
class Fields:
user_id = Field('id', mapping=int, min=1)
user_username = Field('username', min_len=5, max_len=100, regex=r'^[a-zA-Z0-9_\-\.@]+$')
user_password = Field('password', min_len=10, max_len=100, regex=r'^[a-zA-Z0-9]+$')
user_dob = Field('date_of_birth', mapping=Mappings.date())
CreateUser = Schema(
Fields.user_username.clone(required=True),
Fields.user_password.clone(default=None),
Fields.user_dob.clone(default=None),
)
payload = CreateUser.load({'username': 'marcus.aurelius@rome.gov'})
assert payload.username == 'marcus.aurelius@rome.gov'
assert payload.password is None
assert payload.date_of_birth is None
print(CreateUser.dump(payload))
Flask
from wr_schemas import Field, Schema, Mappings
from wr_schemas.flask_request import FlaskRequestSchemaMixin
CreateUser = Schema(
Field('username', required=True),
Field('password', required=True),
mixins=[FlaskRequestSchemaMixin],
)
user = CreateUser.from_request()