WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。当网站中需要用到表单时,WTForms变得很有效。应该把表单定义为类,作为单独的一个模块。
烧瓶-WTF — 烧瓶-WTF 文档 (1.0.x) (flask-wtf.readthedocs.io)https://flask-wtf.readthedocs.io/en/1.0.x/
安装
创建表单
通常是创建一个Form的子类,表单的中的字段作为类的属性,如:
from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired
class MyForm(FlaskForm):
name = StringField('name', validators=[DataRequired()])
Form的主要属性:
- data:字典类型,包括每一个字段的数据。如果需要频繁访问字段值,可以使用form.<field>.data进行访问
- errors:字典类型,包括每一个字段的错误信息。
?Form的主要字段类型:
- BooleanField
- DateField
- ?文本字段,值为datetime.date格式
- 如:YYYY-MM-DD
DateTimeField?
- ?文本字段,值为datetime.datetime格式
- DecimalField
- FileField
- FloatField
- FormField
- HiddenField
- IntegerField
- PasswordField
- RadioField
- SelectField
- ?下拉列表
-
choices参数表示下列的内容,需要是一个列表,列表的每一项是一个元组,如:[(0,'男'),(1,'女')]。 -
coerce参数表示实际选择的内容格式。一般为int
- SelectMultipleField
- ?下拉列表,可选择多个值
- 参数与SelectField相同
- StringField
- SubmitField
- TextAreaField
- TextField.
- ?RecaptchaField
以上字段中都有两个参数,第一个为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时,则表示验证失败。
flask wtforms 常用验证器:?
- Email: 验证上传的数据是否为邮箱
- EqualTo:验证上传的数据是否和另外一个字段相等,常用的就是密码和确认密码两个字段是否相等。
- InputRequired:原始数据的验证。如果不是特说情况,应该使用InutRequired。
- Length: 长度限制,有min 和max两个值进行限制。
- NumberRange:数字区间, 有min和max两个值限制, 荣国处在两个数字之间满足。
- Regexp:自定义正则表达式。
- URL:必须是URL形式。
- UUID:验证UUID
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错误即可。
|