一个简单的验证模块

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

你可能会问你自己——或者我——这到底是什么 垃圾?“请允许我简单地解释一下,您将看到模板 语言很简单。

  1. 我们使用普通的、裸体的pythontypes来表示 给定键的值应为该类型的对象。所以,如果 传入的dict的'name'值不是str, 验证失败。
  2. 当我们期望元素的list时,只需要声明 在我们的模板中,如果list的子项 被认为是同质的。因此,'pets'应该是 是listdicts,所有键都包含str'name''kind'
  3. 我们可以使用tuple声明 价值观,甚至包括 结构。在上面,值'parents'可以是dict 有了父母的名字,一个int(可能表示 或者None(如果你是蝙蝠侠)。
  4. 使用模板和未验证的值调用validate, 在位置上,将导致返回值True或 提高FailedValidationError
  5. 如上所述,使用关键字参数调用validatequiet=True将返回False,而不是引发 FailedValidationError验证失败。
  6. 允许将None类型作为dict值或作为 tuple表示该值是可选的。在一个 tuple允许您声明该值可以是匹配的 某些类型或其他类型可能什么都不是。
  7. undemonstrated)模板也可以声明标量值。 因此,如果所有输入都必须有特定的k/v对,则可以声明 那。

我为什么要用这个?

如果你使用的是像这样的网络框架, Falcon你想建立一个 before hook 为了验证传入的http请求的主体,下面的函数 方法是给你的。至少这就是为什么对我来说。

奖金!

在这个函数中有一个实验性的(读:未经过严格测试的)函数 名为deep_merge的模块,其参数为2 字典。第二个将以某种方式合并为第一个 这样在每个级别上合并键,而不是在顶级键值上 对所有嵌套数据进行重击。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java未从Facebook OAuth接收名字、姓氏和姓氏   我自己代码中的java ConcurrentModificationException   java在Android上获得单像素TIFF图像   java图形输出中的swing集成弹出窗口“通知”   将数据库表中的所有数据集插入jTable Java   java如何使用Hibernate获取不完整的集合?   打印无法从java连接到打印机   java使用分隔符拆分带引号的字符串   java Axis2禁用严格验证(wsdl2java中的Eosv)允许什么,如何使其更加严格?   java有人能帮我处理循环代码吗   java将JsonObject数组转换为整数   JavaXWiki扩展:检测事件空间创建   java如何设置图表的文本方向以使用poi旋转所有文本?   eche RecyclerView项的java Set自定义字体   java单元测试带有私有构造函数的spring组件,无需注入   用户界面如何在java中动态显示一组多个元素?   如何从java应用程序调用IDL(交互式数据语言)?   Java的内置库实现