16 表单处理之表单验证

在上一篇中,我们了解了如何处理表单,接下来,我们将重点讨论表单验证。在实际的 web 开发中,表单验证是非常重要的环节,确保用户提交的数据是有效和安全的。

表单验证的重要性

表单验证的目的是确保用户输入的数据符合特定的规则,以免无效或恶意的数据影响应用的安全性和稳定性。通过验证,可以避免诸如 SQL 注入、XSS 攻击等安全问题。

使用 Flask-WTF 进行表单验证

Flask 提供了一个扩展库叫做 Flask-WTF,它基于 WTForms 实现,简化了表单处理和验证的过程。首先,我们需要安装 Flask-WTF

1
pip install flask-wtf

创建表单类

我们可以通过创建一个表单类来处理表单验证。以下是一个简单的表单类,它包含了用户的用户名和密码字段,并进行相应的验证。

1
2
3
4
5
6
7
8
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Length, EqualTo

class LoginForm(FlaskForm):
username = StringField('用户名', validators=[DataRequired(), Length(min=2, max=20)])
password = PasswordField('密码', validators=[DataRequired()])
submit = SubmitField('登录')

在这个例子中:

  • StringFieldPasswordField 是表单字段,分别用于接收用户输入的用户名和密码。
  • validators 是用于验证字段内容的参数。我们的例子中:
    • DataRequired 表示该字段不能为空。
    • Length 用于限制输入的长度。

在视图中使用表单

接下来,我们将在视图函数中使用这个表单,并处理验证逻辑。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from flask import Flask, render_template, redirect, url_for, flash
from your_module import LoginForm # 确保正确导入表单类

app = Flask(__name__)
app.secret_key = 'your_secret_key' # 用于闪现消息的密钥

@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm() # 创建表单实例
if form.validate_on_submit(): # 验证表单
username = form.username.data
password = form.password.data
# 在这里,你可以添加数据库查询来验证用户
flash('登录成功!', 'success') # 显示成功消息
return redirect(url_for('home')) # 重定向到首页
return render_template('login.html', form=form)

在这里,我们在 login 视图中创建了 LoginForm 的实例,并使用 validate_on_submit() 方法来检测表单是否被提交且数据有效。如果验证通过,我们可以处理实际的登录逻辑(如查询数据库用户信息),并显示成功消息。

模板中的表单

接下来,我们需要在 HTML 模板中渲染这个表单。以下是一个简单的模板代码示例(login.html):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<h1>用户登录</h1>
<form method="POST">
{{ form.hidden_tag() }} <!-- 防止跨站请求伪造 -->
<div>
{{ form.username.label }}
{{ form.username(size=32) }}
{% for error in form.username.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</div>
<div>
{{ form.password.label }}
{{ form.password(size=32) }}
{% for error in form.password.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</div>
<div>
{{ form.submit() }}
</div>
</form>
{% with messages = get_flashed_messages(with_categories=True) %}
{% if messages %}
<ul>
{% for category, message in messages %}
<li class="{{ category }}">{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
</body>
</html>

在这个模板中,我们使用了 Flask-WTF 提供的渲染方法来显示表单。每个表单字段后都有一个循环,用于显示任何可能的验证错误,这样可以清晰地反馈给用户。

小结

现在我们已经完成了基于 Flask-WTF 的表单验证。通过在 Flask 应用中集成表单类和验证,我们能够确保收集到的用户数据是有效且安全的。在下一个章节中,我们将进一步触及数据库操作,使用 SQLAlchemy 来处理数据存储。表单验证将为我们在数据库中的数据操作提供坚实的基础。

预告:数据库操作之使用 SQLAlchemy

敬请期待,下一篇我们将一起深入了解如何使用 SQLAlchemy 进行数据库操作,管理用户信息等重要应用。

16 表单处理之表单验证

https://zglg.work/flask-zero/16/

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-10

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论