WTforms作用:当网站中需要用到表单时,WTForms变得很有效。应该把表单定义为类,作为单独的一个模块。
表单类:
class wtforms.form.Form:
创建表单:
创建表单时,通常是创建一个Form的子类,表单的中的字段作为类的属性,如:
from wtforms import Form, BooleanField, TextField,PasswordField,validatorsclass RegistrationForm(Form): username = TextField('Username', [validators.Length(min=4, max=25)]) email = TextField('Email Address', [validators.Length(min=6, max=35)]) password = PasswordField('New Password', [ validators.Required(), validators.EqualTo('confirm', message='Passwords must match') ]) confirm = PasswordField('Repeat Password') accept_tos = BooleanField('I accept the TOS', [validators.Required()])
需要注意的是:
1、字段名是区分大小写的
2、字段名不能以'_'开头
3、字段名不能以'validate'开头
Form的主要属性:
data:字典类型,包括每一个字段的数据。如果需要频繁访问字段值,可以使用form.<field>.data进行访问
errors:字典类型,包括每一个字段的错误信息。
字段的主要类型有:
BooleanField,DateField,DateTimeField,DecimalField,FileField,FloatField,FormField,HiddenField,IntegerField,PasswordField,RadioField,SelectField,SelectMultipleField,StringField,SubmitField,TextAreaField,TextField.
如何使用Form:
在视图函数中,表单用法示例如下:
@app.route('/register', methods=['GET', 'POST'])def register(): form = RegistrationForm(request.form) if request.method == 'POST' and form.validate(): user = User(form.username.data, form.email.data, form.password.data) db_session.add(user) flash('Thanks for registering') return redirect(url_for('login')) return render_template('register.html', form=form)
模版中的表单:
以下是一个使用宏的示例_formhelpers.html模板:
{% macro render_field(field) %}
- {% for error in field.errors %}
- { { error }} {% endfor %} {% endif %}
以下是使用了上面的_formhelpers.html的register.html模板:
{% from "_formhelpers.html" import render_field %}