WTForms是一個支持多個web框架的form組件,主要用於對用戶請求數據進行驗證。
安裝:pip3 install wtforms
WTforms作用:當網站中需要用到表單時,WTForms變得很有效。應該把表單定義爲類,作爲單獨的一個模塊。
表單類:
class wtforms.form.Form:
創建表單:
創建表單時,通常是創建一個Form的子類,表單的中的字段作爲類的屬性,如:
from wtforms import Form, BooleanField, TextField,PasswordField,validators
class 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) %}
<dt>{{ field.label }}
<dd>{{ field(**kwargs)|safe }}
{% if field.errors %}
<ul class=errors>
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</dd>{% endmacro %}
以下是使用了上面的_formhelpers.html的register.html模板:
{% from "_formhelpers.html" import render_field %}
<form method=post action="/register">
<dl>
{{ render_field(form.username) }}
{{ render_field(form.email) }}
{{ render_field(form.password) }}
{{ render_field(form.confirm) }}
{{ render_field(form.accept_tos) }}
</dl>
<p><input type=submit value=Register></form>