TurboGears – 验证
一个好的 Forms 小部件库应该具有输入验证功能。例如,应该强制用户在必填字段中输入数据,或者验证电子邮件字段是否包含有效的电子邮件,而无需诉诸任何其他编程方式(如 JavaScript 函数)进行验证。
ToscaWidgets Forms 库的早期版本曾经依赖 FormEncode 模块来提供验证支持。ToscaWidgets2 现在在 tw2.core 模块中提供内置验证支持。但是,仍然可以使用 FormEncode 验证技术。
为了对 ToscaWidgets 表单进行验证,使用 @validate 装饰器。
@validate(form, error_handler, validators)
'form' 是需要验证的 ToscaWidgets 表单对象。
'error-handler' 是用于处理表单错误的控制器方法。
'validators' 是一个包含 FormEncode 验证器的字典对象。
验证器的类型
tw2.core 模块包含一个验证器类,其他验证器从该类继承而来。也可以基于此设计自定义验证器。下面描述了一些重要的验证器 −
LengthValidator − 检查值是否具有规定的长度。最小和最大限制使用 min 和 max 参数定义。长度低于和高于 min 和 max 的自定义消息可以指定为 tooshort 和 toolong 参数。
tw2.core.LengthValidator(min = minval, max = maxval, msgs = { 'tooshort': ('message for short length'), 'toolong': ('message for long length)})
RangeValidator − 通常与 RangeField 一起使用。它有助于验证数字字段的值在最小和最大限制内。tooshort 和 toolong 参数的消息可以自定义。
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 − 非常有用,可确保用户输入的是有效日期。日期格式(默认为 Y-M-D)和错误消息可自定义。还可以指定最小和最大日期限制。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 的子类。