TurboGears – 验证



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

早期版本的 ToscaWidgets 表单库依赖于 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 的子类。

广告

© . All rights reserved.