一周学会Flask3 Python Web开发-Flask3之表单处理WTForms安装与定义WTForms表单类

锋哥原创的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 字符串或可调用对象,用来为表单字段设置默认值
相关推荐
无限进步_几秒前
深入理解C语言scanf函数:从基础到高级用法完全指南
c语言·开发语言·c++·后端·算法·visual studio
Wild_Pointer.7 分钟前
Qt Creator:避免QRunnable和QObject多重继承
开发语言·qt
三无少女指南8 分钟前
关于JVM调优,我想聊聊数据和耐心
java·开发语言·jvm
光影少年10 分钟前
前端线上出现白屏如何排查问题所在,利用第三方的工具都有哪些
前端·学习·web安全·前端框架
濑户川13 分钟前
Vue3 计算属性与监听器:computed、watch、watchEffect 用法解析
前端·javascript·vue.js
_Sem23 分钟前
KMP实战:从单端到跨平台的完整迁移指南
android·前端·app
Carry34525 分钟前
React 与 Vue 开发差异——CSS 样式
前端
前端九哥28 分钟前
我删光了项目里的 try-catch,老板:6
前端·vue.js
2301_7644413329 分钟前
身份证校验工具
前端·python·1024程序员节
南棱笑笑生1 小时前
20251027在Ubuntu20.04.6上编译AIO-3576Q38开发板的Buildroot系统解决qt5webengine编译异常的问题
开发语言·qt·rockchip