下载安装
pip install WTForms
主要概念
- Forms:Forms类是WTForms的核心容器。表单(Forms)表示域(Fields)的集合,域能通过表单的字典形式或者属性形式访问。
- Fields:Fields(域)做最繁重的工作。每个域(Field)代表一个数据类型,并且域操作强制表单输入为响应的数据类型。例如,
InputRequired
和StringField
表示两种不同的数据类型。域除了包含的数据之外,还包含大量有用的属性,例如标签、描述、验证错误的列表。 - Validators:Validators(验证器)只是接受输入,验证它是否满足某些条件,比如字符串的最大长度,然后返回。或者,如果验证失败,则引发
ValidationError
。这个系统非常简单和灵活,允许在字段上链接任意数量的验证器。 - Widget:Widget(组件)的工作是渲染域(field)的HTML表示。每个域可以指定Widget实例,但每个域默认拥有一个合理的Widget。
- CSRF:CSRF(Cross-site reqest forgery)跨站请求伪造。也被称为
one-click attack
或者session riding
,通常缩写为CSRF或者XSRF,是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS利用的是用户对指定网站的信任,CSRF利用的是网站对用户网页浏览器的信任。
基本使用
(1)创建表单类。
from wtforms import Form, BooleanField, StringField, validators
class RegisterForm(Form):
username = StringField('Username', [validators.Length(min=4, max=25)])
email = SringField('Email Address', [validators.Length(min=6, max=35)])
accept_rules = BooleanField('I accept the site rules', [validators.InputRequired()])
(2)实例化表单类。
@app.route('/register', methods=['GET', 'POST'])
def register():
form = RegisterForm(request.form) # 实例化表单类
if request.method = 'POST' and form.validate(): # 如果提交表单,并字段验证通过
# 获取字段内容
email = from.email.data
username = from.username.data
accept_rules = from.accept.data
# 省略其余代码
return render_template('register.html', form=form) # 渲染模板
(3)模板中渲染域。
<form method="POST" action="/login">
<div>{{ form.email.label }}:{{ form.email() }}</div>
<div>{{ form.username.label }}:{{ form.username() }}</div>
<div>{{ form.accept_rules.label }}:{{ form.accept_rules() }}</div>
</form>
上述代码中,使用form.username.label
来获取RegisterForm
类的username的名称,使用form.username
来获取表单中的username域信息。