17 Flask 表单验证实战

17 Flask 表单验证实战

在 Flask 中,表单验证是处理用户输入的重要环节。借助 Flask-WTF 库,我们可以方便地进行表单验证。本文将通过一个简单的用户注册表单示例来演示如何实现表单验证。

安装 Flask-WTF

首先,我们需要安装 Flask-WTF。在终端中运行以下命令:

1
pip install Flask-WTF

创建 Flask 应用

接下来,我们将创建一个基本的 Flask 应用程序。以下是一个简单的应用结构:

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
from flask import Flask, render_template, redirect, url_for, flash
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Length, EqualTo

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key_here'

class RegistrationForm(FlaskForm):
username = StringField('用户名', validators=[DataRequired(), Length(min=2, max=20)])
password = PasswordField('密码', validators=[DataRequired(), Length(min=6, max=20)])
confirm_password = PasswordField('确认密码', validators=[DataRequired(), EqualTo('password')])
submit = SubmitField('注册')

@app.route("/register", methods=['GET', 'POST'])
def register():
form = RegistrationForm()
if form.validate_on_submit():
flash(f'账户创建成功,欢迎 {form.username.data}!', 'success')
return redirect(url_for('home'))
return render_template('register.html', form=form)

@app.route("/")
def home():
return "首页"

if __name__ == "__main__":
app.run(debug=True)

表单类和验证

在上面的代码中,我们定义了一个 RegistrationForm 表单类。各字段的验证器说明如下:

  • DataRequired():这是一个必填字段的验证器。
  • Length(min=2, max=20):限制用户名的长度在 2 到 20 个字符之间。
  • EqualTo('password'):确保 confirm_password 字段的值与 password 字段一致。

创建注册模板

我们需要一个 HTML 模板来显示注册表单。创建一个名为 register.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
40
41
42
43
44
45
46
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>注册</title>
</head>
<body>
<h1>注册</h1>
<form method="POST">
{{ form.csrf_token }}
<div>
{{ form.username.label }}<br>
{{ form.username(size=32) }}<br>
{% for error in form.username.errors %}
<span style="color: red;">{{ error }}</span><br>
{% endfor %}
</div>
<div>
{{ form.password.label }}<br>
{{ form.password(size=32) }}<br>
{% for error in form.password.errors %}
<span style="color: red;">{{ error }}</span><br>
{% endfor %}
</div>
<div>
{{ form.confirm_password.label }}<br>
{{ form.confirm_password(size=32) }}<br>
{% for error in form.confirm_password.errors %}
<span style="color: red;">{{ error }}</span><br>
{% endfor %}
</div>
<div>
{{ form.submit() }}
</div>
</form>
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
</body>
</html>

模板解释

  • 我们使用 {{ form.csrf_token }} 生成 CSRF 令牌,提高表单的安全性。
  • 每个输入字段旁都有错误信息提示,通过 {% for error in form.field.errors %} 遍历并显示。

运行 Flask 应用

确保以上代码和模板都正确后,运行 Flask 应用。在浏览器访问 http://127.0.0.1:5000/register,你将看到注册表单。如果填写不合规的信息,表单会显示相应的错误提示。

总结

在本节中,我们学习了如何使用 Flask-WTF 进行表单验证。关键点包括:

  • 使用 FlaskForm 方便地定义表单和验证规则。
  • 在模板中动态展示验证错误信息。
  • 保护表单免受 CSRF 攻击。

通过这些步骤,我们已成功构建了一个基本的注册表单,并实现了输入验证。希望这对你进一步掌握 Flask 开发有所帮助!

17 Flask 表单验证实战

https://zglg.work/flask/17/

作者

AI教程网

发布于

2024-08-08

更新于

2024-08-10

许可协议