
Web框架——Flask系列之WTF表单验证练习(七)
发布日期:2021-05-08 02:34:16
浏览次数:23
分类:精选文章
本文共 5226 字,大约阅读时间需要 17 分钟。
Web表单与Flask-WTF的应用
Web表单是Web应用程序的基础功能,它在HTML页面中负责数据采集。表单主要由表单标签、表单域和表单按钮三部分组成,用于让用户输入数据并将其提交给服务器。通过表单,Web应用程序能够收集用户的输入数据,实现与服务器的交互。
在Flask框架中,处理Web表单通常使用Flask-WTF扩展。Flask-WTF基于WTForms库,提供了验证表单数据的功能,同时支持HTML标准字段和自定义验证逻辑。
WTForms的验证功能
WTForms支持多种验证函数,帮助开发者确保表单数据的有效性。以下是常用的验证函数示例:
DataRequired
:确保字段不为空。StringLength
:验证字段的长度限制。Regex
:通过正则表达式验证字段格式。EqualTo
:比较两个字段是否相同。
Flask-WTF需要配置一个秘密密钥(SECRET_KEY
),用于生成 CSRF令牌。设置示例如下:
app.config['SECRET_KEY'] = 'silents is gold'
使用Flask-WTF实现表单
1. 在HTML模板中编写表单
Flask-WTF支持在模板中直接使用表单字段。以下是一个简单的表单示例:
Login
2. 在视图函数中获取表单数据
视图函数可以通过request.form
获取表单提交的数据。以下是一个简单的Flask路由示例:
from flask import Flask, render_template, requestapp = Flask(__name__)app.config['SECRET_KEY'] = 'silents is gold'@app.route('/login', methods=['GET', 'POST'])def login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] print(f'用户名:{username}, 密码:{password}') return render_template('login.html') return render_template('login.html')
3. 使用Flask-WTF实现表单验证
Flask-WTF通过自定义表单类(继承自FlaskForm
)实现表单验证。以下是一个完整的表单类和视图函数示例:
from flask_wtf import FlaskFormfrom wtforms import StringField, PasswordField, SubmitFieldfrom wtforms.validators import DataRequired, EqualToclass Login(Form): username = StringField(label='用户名', validators=[DataRequired()]) password = PasswordField(label='密码', validators=[DataRequired()]) password2 = PasswordField(label='确认密码', validators=[DataRequired(), EqualTo('password', '密码不一致')]) submit = SubmitField('登录')@app.route('/login', methods=['GET', 'POST'])def login(): login_form = Login() if login_form.validate_on_submit(): username = login_form.username.data password = login_form.password.data print(f'登录成功,用户名:{username}, 密码:{password}') return redirect(url_for('index')) return render_template('login.html', form=login_form)
模板代码与Python实现
模板文件(login.html)
{% for message in get_flashed_messages() %}Login
{{ message }}
{% endfor %}Python代码(wtf.py)
from flask import Flask, render_template, request, flashfrom flask_wtf import FlaskFormfrom wtforms import StringField, PasswordField, SubmitFieldfrom wtforms.validators import DataRequired, EqualToapp = Flask(__name__)app.secret_key = 'Zep03'class LoginForm(FlaskForm): username = StringField(label='用户名', validators=[DataRequired()]) password = PasswordField(label='密码', validators=[DataRequired()]) password2 = PasswordField(label='确认密码', validators=[DataRequired(), EqualTo('password', '密码不一致')]) submit = SubmitField('登录')@app.route('/login', methods=['GET', 'POST'])def login(): login_form = LoginForm() if login_form.validate_on_submit(): username = login_form.username.data password = login_form.password.data print(f'登录成功,用户名:{username}, 密码:{password}') return redirect(url_for('index')) return render_template('login.html', form=login_form)
效果图及目录结构
以下是文章的目录结构和效果图:
目录结构
.├── __init__.py├── forms/│ ├── __init__.py│ ├── models/│ │ └── login.py│ ├── routes/│ │ └── login.py│ └── templates/│ └── login.html└── wtf.py
效果图
- 登录表单页面(
login.html
):用户可以输入用户名和密码。 - 表单验证成功页面:当输入正确时,页面跳转到主页。
- 错误提示页面:当输入错误时,显示错误提示信息。
模板代码与Python实现
模板代码(login.html)
{% for message in get_flashed_messages() %}Login
{{ message }}
{% endfor %}Python代码(wtf.py)
from flask import Flask, render_template, request, flashfrom flask_wtf import FlaskFormfrom wtforms import StringField, PasswordField, SubmitFieldfrom wtforms.validators import DataRequired, EqualToapp = Flask(__name__)app.secret_key = 'Zep03'class LoginForm(FlaskForm): username = StringField(label='用户名', validators=[DataRequired()]) password = PasswordField(label='密码', validators=[DataRequired()]) password2 = PasswordField(label='确认密码', validators=[DataRequired(), EqualTo('password', '密码不一致')]) submit = SubmitField('登录')@app.route('/login', methods=['GET', 'POST'])def login(): login_form = LoginForm() if login_form.validate_on_submit(): username = login_form.username.data password = login_form.password.data print(f'登录成功,用户名:{username}, 密码:{password}') return redirect(url_for('index')) return render_template('login.html', form=login_form)
通过以上代码,开发者可以轻松创建并验证Web表单,确保数据的安全性和完整性。Flask-WTF 提供了强大的表单验证功能,支持多种验证场景,帮助开发者高效完成数据处理任务。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月11日 16时20分57秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
基于Vue2.0+Vue-router构建一个简单的单页应用
2019-03-06
基于vue2.0实现仿百度前端分页效果(二)
2019-03-06
JS魔法堂:函数重载 之 获取变量的数据类型
2019-03-06
时间序列神器之争:Prophet VS LSTM
2019-03-06
SpringBoot中关于Mybatis使用的三个问题
2019-03-06
MapReduce实验
2019-03-06
Leaflet 带箭头轨迹以及沿轨迹带方向的动态marker
2019-03-06
java大数据最全课程学习笔记(1)--Hadoop简介和安装及伪分布式
2019-03-06
java大数据最全课程学习笔记(2)--Hadoop完全分布式运行模式
2019-03-06
大部分程序员还不知道的 Servelt3 异步请求,原来这么简单?
2019-03-06
[apue] popen/pclose 疑点解惑
2019-03-06
[apue] getopt 可能重排参数
2019-03-06
移动互联网恶意软件命名及分类
2019-03-06
adb shell am 的用法
2019-03-06
PySide图形界面开发(一)
2019-03-06
Android如果有一个任意写入的漏洞,如何将写权限转成执行权限
2019-03-06
三角网格体积计算
2019-03-06
现代3D图形编程学习-基础简介(2) (译)
2019-03-06
Github教程(3)
2019-03-06
vue实现简单的点击切换颜色
2019-03-06