WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。当网站中需要用到表单时,WTForms变得很有效。应该把表单定义为类,作为单独的一个模块。
烧瓶-WTF — 烧瓶-WTF 文档 (1.0.x) (flask-wtf.readthedocs.io)https://flask-wtf.readthedocs.io/en/1.0.x/
pip install wtforms
通常是创建一个Form的子类,表单的中的字段作为类的属性,如:
- from flask_wtf import FlaskForm
- from wtforms import StringField
- from wtforms.validators import DataRequired
-
- class MyForm(FlaskForm):
- name = StringField('name', validators=[DataRequired()])
Form的主要属性:
Form的主要字段类型:
DateTimeField
choices参数表示下列的内容,需要是一个列表,列表的每一项是一个元组,如:[(0,'男'),(1,'女')]。
coerce参数表示实际选择的内容格式。一般为int
以上字段中都有两个参数,第一个为label,表示这个表单的标签,第二个是validators,是一个列表,表示验证器。
- @app.route('/submit', methods=['GET', 'POST'])
- def submit():
- form = MyForm()
- if form.validate_on_submit():
- return redirect('/success')
- return render_template('submit.html', form=form)
当form.validate_on_submit()返回True时,则表示验证失败。
- from wtforms import Form, StringField, IntegerField
- from wtforms.validators import (Email, EqualTo, InputRequired, Length, NumberRange, Regexp, URL, UUID,ValidationError)
-
- class LoginForm(Form):
- email = StringField(validators=[Email()])
- username = StringField(validators=[InputRequired, Length(min=3, max=15)])
- age = IntegerField(validators=[NumberRange(1,150)])
- phont = StringField(validators=[Regexp(r'1[3,5,6,7,8]\d{9}')])
- homeurl = StringField(validators=[URL()])
- uuid = StringField(validators=[UUID()])
- captcha = StringField(validators=[Length(6, 6)])
- from flask_wtf import FlaskForm
- from wtforms.validators import ValidationError
- from wtforms import StringField
-
- class LoginForm(FlaskForm):
- name = StringField()
-
- # 自定义验证器,validate_(写需要验证的字段名captcha)
- def validate_name(self, field):
- # 在ValidationError中填写错误提示信息, 错误信息可通过 form.errors 获取到
- if not field.data:
- raise ValidationError('请输入名字')
如果验证失败,抛出ValidationError错误即可。