当编写验证客户端提交的多个Form表单时,视图函数中的代码很快将变得冗长和难以阅读,调试和维护也变得难以忍受。通过使用WTForms库,将表单定义为继承于Form的类,使用该类可以验证所有表单,并且可以在模板中自动生成表单对应的HTML元素,定制HTML生成过程,从而实现业务逻辑代码和展示的分离,并使得代码简洁干净、易于维护。

1. 下载安装

2. 关键概念

  • Forms是WTForms库的核心容器,它包含一系列的Fields,可通过属性或字典样式访问;
  • Fields是最主要的表单处理单元,每一种表单数据类型对应着一种FieldFiled还包含一些有用的属性,如:<label>标签、描述信息、验证错误信息等;
  • 每一个Field都有一个Widget实例,用于生成该Field的HTML元素;
  • Field还包含一个Validators列表,用于指定该字段的验证规则。

3. 使用示例

创建一个表单:

使用继承扩展表单项:

在视图函数中使用表单:

4. 常用Validators

validator定义 说明
DataRequired(message=None) 检查当前field是否有值,若无,则验证失败
Email(message=None) 检查当前field是否的值是否为email地址
EqualTo(fieldname, message=None) 比较当前field的值是否与fieldname对应field的值相同
InputRequired(message=None) 验证用户是否输入了内容
IPAddress(ipv4=True, ipv6=False, message=None) 验证是否为IP地址
Length(min=-1, max=-1, message=None) 验证输入的字符串长度是否在指定范围内
MacAddress(message=None) 验证是否为MAC地址
NumberRange(min=None, max=None, message=None) 验证数值是否在指定范围内
Optional(strip_whitespace=True) 指定当前field为可选,停止对其进行验证
Regexp(regex, flags=0, message=None) 使用正则表达式验证当前field
URL(require_tld=True, message=None) 验证是否为URL地址
UUID(message=None) 验证是否为UUID字符串
AnyOf(values, message=None, values_formatter=None) 验证输入值是否为values之一
NoneOf(values, message=None, values_formatter=None) 验证输入值是否不是values中任何一个

5. 自定义validators

6. 渲染Fields

可在网页模板中使用fields对象,调用其预定义函数,输出对应的html标签,使用示例如下:

对于验证时的错误信息,可以在模板中使用如下方法输出:

 

留下一个回复

请输入您的评论!
请输入您的昵称