使用 WTForms 进行表单验证 — Flask 文档
使用 WTForms 进行表单验证
当您必须处理由浏览器视图提交的表单数据时,代码很快就会变得非常难以阅读。 有一些库旨在使这个过程更容易管理。 其中之一是 WTForms,我们将在这里处理。 如果您发现自己处于拥有多种表格的情况,您可能想尝试一下。
当您使用 WTForms 时,您必须首先将表单定义为类。 我建议将应用程序分解为多个模块(Larger Applications),并为表单添加一个单独的模块。
表格
这是典型注册页面的示例表单:
在视图中
在视图函数中,这种形式的用法是这样的:
请注意,我们暗示该视图在此处使用 SQLAlchemy(Flask 中的 SQLAlchemy),但这当然不是必需的。 根据需要调整代码。
要记住的事情:
- 如果数据通过 HTTP
POST
方法和args
方法提交,则从请求form
值创建表单,如果数据作为GET
提交。 - 要验证数据,请调用
validate()
方法,如果数据验证,该方法将返回True
,否则返回False
。 - 从表单访问单个值,访问形式。 。数据 .
模板中的表格
现在到模板端。 当您将表单传递给模板时,您可以轻松地在那里呈现它们。 查看以下示例模板,了解这有多么简单。 WTForms 已经为我们完成了一半的表单生成。 为了让它更好,我们可以编写一个宏来渲染一个带有标签的字段和一个错误列表(如果有的话)。
这是一个带有这样宏的示例 _formhelpers.html
模板:
这个宏接受几个关键字参数,这些参数被转发到 WTForm 的字段函数,它为我们呈现字段。 关键字参数将作为 HTML 属性插入。 因此,例如,您可以调用 render_field(form.username, class='username')
向输入元素添加一个类。 请注意,WTForms 返回标准的 Python unicode 字符串,因此我们必须告诉 Jinja2 该数据已经使用 |safe
过滤器进行了 HTML 转义。
这是我们上面使用的函数的 register.html
模板,它利用了 _formhelpers.html
模板:
有关 WTForms 的更多信息,请访问 WTForms 网站 。