一个简单的验证模块
validict的Python项目详细描述
说明
validict是一个python模块,用于将未知值与 所需模板。它是为顶级类型设计的 {TT2} $,但应该足够灵活,以处理^ {TT3}$S或 标量(如果你是在处理标量,我建议你运行 远离这个,只使用python的isinstance)。重要:这 库不将“tuple”视为模板 期望,但作为对给定职位的一组期望 在模板中。
用法
用pip安装。
shell~$ pip install validict
使用validict很简单。首先,声明您的模板:
fromvalidictimportvalidatetemplate={'name':str,'age':int,'pets':[{'name':str,'kind':str}],'parents':([{'name':str}],int,None)}kid={'name':"Bart Simpson",'age':10,'pets':[{'name':"Santa's Little Helper",'kind':"Dog"},{'name':"Snowball II",'kind':"Cat"}],'parents':[{'name':"Homer Simpson"},{'name':"Marge Simpson"}]}validate(template,kid)# returns Truebad_kid={'name':"Nelson Muntz",'age':12}validate(template,bad_kid)# raises FailedValidationErrorvalidate(template,bad_kid,quiet=True)# returns Falseoptional_kid={'name':"Milhouse Van Houten",'age':10,'pets':[{'name':"Lhasa Apso",'kind':"Dog"}],'parents':None# Okay, not really, but for demonstration purposes...}validate(template,optional_kid)# returns True
你可能会问你自己——或者我——这到底是什么 垃圾?“请允许我简单地解释一下,您将看到模板 语言很简单。
- 我们使用普通的、裸体的pythontypes来表示 给定键的值应为该类型的对象。所以,如果 传入的dict的'name'值不是str, 验证失败。
- 当我们期望元素的list时,只需要声明 在我们的模板中,如果list的子项 被认为是同质的。因此,'pets'应该是 是list的dicts,所有键都包含str值 'name'和'kind'。
- 我们可以使用tuple声明 价值观,甚至包括 结构。在上面,值'parents'可以是dict 有了父母的名字,一个int(可能表示 或者None(如果你是蝙蝠侠)。
- 使用模板和未验证的值调用validate, 在位置上,将导致返回值True或 提高FailedValidationError。
- 如上所述,使用关键字参数调用validate。 quiet=True将返回False,而不是引发 FailedValidationError验证失败。
- 允许将None类型作为dict值或作为 tuple表示该值是可选的。在一个 tuple允许您声明该值可以是匹配的 某些类型或其他类型可能什么都不是。
- (undemonstrated)模板也可以声明标量值。 因此,如果所有输入都必须有特定的k/v对,则可以声明 那。
我为什么要用这个?
如果你使用的是像这样的网络框架, Falcon你想建立一个 before hook 为了验证传入的http请求的主体,下面的函数 方法是给你的。至少这就是为什么对我来说。
奖金!
在这个函数中有一个实验性的(读:未经过严格测试的)函数 名为deep_merge的模块,其参数为2 字典。第二个将以某种方式合并为第一个 这样在每个级别上合并键,而不是在顶级键值上 对所有嵌套数据进行重击。