TurboGears – 验证


一个好的表单小部件库应该具有输入验证功能。例如,应强制用户在必填字段中输入数据,或验证电子邮件字段是否包含有效的电子邮件,而无需诉诸任何其他编程手段(如 JavaScript 函数)进行验证。

ToscaWidgets 表单库的早期版本过去依赖 FormEncode 模块来提供验证支持。ToscaWidgets2 现在在 tw2.core 模块中提供了内置验证支持。然而,仍然可以使用 FormEncode 验证技术。

为了对 ToscaWidgets 表单进行验证,使用了 @validate 装饰器。

@validate(form, error_handler, validators)
  • “ form 是要验证的 ToscaWidgets 表单对象。

  • “错误处理程序”是用于处理表单错误的控制器方法。

  • “验证器是包含 FormEncode 验证器的字典对象。

验证器的类型

tw2.core 模块包含一个验证器类,其他验证器都继承自该类。还可以基于它设计自定义验证器。一些重要的验证器如下所述 -

LengthValidator - 检查值是否具有规定的长度。最小和最大限制由 min 和 max 参数定义。长度低于和高于最小值和最大值的自定义消息可以指定为“tooshort”和“toolong”参数。

tw2.core.LengthValidator(min = minval, max = maxval, 
   msgs = { 'tooshort': (‘message for short length’), 
   'toolong': (‘message for long length)})

RangeValidator - 通常与 RangeField 一起使用。它有助于验证数字字段的值在最小和最大限制内。可以自定义太短和太长参数的消息。

tw2.core.RangeValidator(min = minval, max = maxval, 
   msgs = { 'tooshort': (‘message for short length’), 
   'toolong': (‘message for long length)})

IntValidator - 该类派生自 RangeValidator。这通常用于验证普通文本字段中的输入是否包含整数数据。可以设置最小和最大限制以及错误消息。此外,非整数输入的错误消息可以指定为“notint”参数。

tw2.core.IntValidator(msgs = {‘notint’:’Must be Integer’})

OneOfValidator - 此验证器强制用户仅从列表中的可用选项中选择一个值。

tw2.core.OneOfValidator(values = [option1, option2,..], 
   msgs = {‘notinlist’:’Not in List’}}

DateValidator - 对于确保用户输入是有效日期非常有用。日期格式(默认为 YMD)和错误消息可自定义。还可以指定最小和最大日期限制。DateTimeValidator 还可用于验证 DateTime 类的对象。

tw2.core.DateValidator(msgs = {format = ’%Y-%m-%d’, 
   'baddatetime': ('baddate', ('Must follow date format $format_str'))}

EmailValidator - 根据有效的电子邮件地址验证用户输入。该类继承自更通用的 RegexValidator。

tw2.core.EmailValidator(msgs = {'badregex': ('bademail', 
   ('Must be a valid email address')) }

UrlValidator - 该类也是从 RegexValidator 继承的。它验证用户输入的有效 URL。

tw2.core.UrlValidator(msgs = {'badregex': ('badurl', ('Must be a valid URL’)) }

MatchValidator - 确认一个字段的值是否与另一字段匹配。当用户需要选择并确认密码字段时,这特别有用。MatchValidator 的典型用法如下所示 -

import tw2.core as twc
import tw2.forms as twf
  
  class AdmissionForm(twf.Form):
      class child(twf.TableLayout):
         validator = twc.MatchValidator('pw', 'pwconfirm')
         pw = twf.PasswordField()
         pwconfirm = twf.PasswordField()

还可以构建一个复合验证器,如果任何一项检查通过,则希望验证成功。在其他情况下,您可能希望仅当输入通过所有检查时验证才能成功。为此,tw2.core 提供了 Any 和 All 验证器,它们是可扩展的CompoundValidator 的子类。