锋哥原创的Flask3 Python Web开发 Flask3视频教程:
2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili
我们平时开发项目,都会用到表单,编写表单,提交表单,验证表单,如果有错误,还得搞个表单报错提示。如果我们用Flask3扩展flask-wtf提供的WTForms编写表单,流程很简化很多。
安装WTForms
扩展Flask-WTF集成了WTForms,使用它可以在Flask中更方便地使用WTForms。Flask-WTF将表单数据解析、CSRF保护、文件上传等功能与Flask集成,另外还附加了reCAPTCHA支持。
我们首先安装下WTForms,终端输入:
pip install flask-wtf -i https://pypi.tuna.tsinghua.edu.cn/simple

定义WTForms表单类
我们定义表单类,继承FlaskForm。一个表单由若干个输人字段组成,这些字段分别用表单类的类属性来表示(字段即Field,你可以简单理解为表单内的输入框、按钮等部件)。下面定义了一个LoginForm类,最终会生成我们在前面定义的HTML表单:
class LoginForm(FlaskForm):
username = StringField('用户名')
password = PasswordField('密码')
remember = BooleanField("记住我")
submit = SubmitField("登录")
常用的WTForms表单字段:
字段类 | 说明 | 对应的HTML |
---|---|---|
BooleanField | 复选框,值会被处理为True或False | <input type="checkbox"> |
DateField | 文本字段,值会被处理为datetime.date对象 | <input type="text"> |
DateTimeField | 文本字段,值会被处理为datetime.datetime对象 | <input type="text"> |
FileField | 文件上传字段 | <input type="file"> |
FloatField | 浮点数字段,值会被处理为浮点型 | <input type="text"> |
IntegerField | 整数字段,值会被处理为整型 | <input type="text"> |
RadioField | 一组单选按钮 | <input type="radio"> |
SelectField | 下拉列表 | <select><option></option><select> |
SelectMultipleField | 多选下拉列表 | <select multiple><option></option></select> |
SubmitField | 提交按钮 | <input type="submit"> |
StringField | 文本字段 | <input typc="text"> |
HiddenField | 隐藏文本字段 | <input type="hidden"> |
PasswordField | 密码文本字段 | <input type="password"> |
TextAreaField | 多行文本字段 | <textarea></textarea> |
常用表单字段类属性:
参数 | 说明 |
---|---|
label | 字段标签<label>的值,也就是渲染后显示在输人字段前的文字 |
render_kw | 一个字典,用来设置对应的HTML <input>标签的属性,比如传入{'placeholder: '请输入搜索关键字'},渲染后的HTML代码会将<input>标签的placeholder属性设为'请输入搜索关键字' |
validators | 一个列表,包含一系列验证器,会在表单提交后被逐一调用验证表单数据 |
default | 字符串或可调用对象,用来为表单字段设置默认值 |