在 Flask 中,表单验证是处理用户输入的重要环节。借助 Flask-WTF
库,我们可以方便地进行表单验证。本文将通过一个简单的用户注册表单示例来演示如何实现表单验证。
安装 Flask-WTF
首先,我们需要安装 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 开发有所帮助!