欢迎访问宙启技术站
智能推送

整合flask_bootstrap和Flask-WTForms实现表单验证

发布时间:2023-12-19 04:38:56

在Flask中使用表单验证是一种很常见的需求,可以借助Flask-WTForms和Flask-Bootstrap来实现这个功能。Flask-WTForms提供了一个易于使用的表单验证库,而Flask-Bootstrap为表单提供了漂亮的样式。

首先,确保你已经安装了Flask、Flask-WTForms和Flask-Bootstrap。可以通过在终端运行以下命令来安装它们:

pip install flask
pip install flask-wtforms
pip install flask-bootstrap

接下来,我们来创建一个简单的Flask应用,并实现一个包含表单验证的例子。创建一个名为app.py的Python文件,并在其中添加以下代码:

from flask import Flask, render_template, request, redirect, url_for
from flask_bootstrap import Bootstrap
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired

app = Flask(__name__)
app.config['SECRET_KEY'] = 'mysecretkey'
bootstrap = Bootstrap(app)

class MyForm(FlaskForm):
    name = StringField('Name', validators=[DataRequired()])
    submit = SubmitField('Submit')

@app.route('/', methods=['GET', 'POST'])
def index():
    form = MyForm()
    if form.validate_on_submit():
        return redirect(url_for('success', name=form.name.data))
    return render_template('index.html', form=form)

@app.route('/success/<name>')
def success(name):
    return f'Success! Welcome {name}.'

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

在上面的代码中,我们首先导入了所需的库和模块。然后,我们创建了一个名为MyForm的表单类,它有一个名为name的字符串字段和一个名为submit的提交字段。在name字段中,我们使用了DataRequired验证器来确保字段不为空。

接下来,在主视图函数(index())中,我们首先实例化了MyForm类,并将其传递给模板。然后,我们检查表单是否已通过验证(form.validate_on_submit()),如果是,我们将用户重定向到一个成功页面,并通过URL参数传递name值。否则,我们渲染包含表单的页面。

success()视图函数中,我们获取传递的name值,并返回一个欢迎消息。

下一步,我们需要创建一个HTML模板文件来渲染包含表单的页面。在同一目录下创建一个名为index.html的文件,添加以下代码:

{% extends "bootstrap/base.html" %}
{% import "bootstrap/wtf.html" as wtf %}

{% block title %}Flask Form Validation{% endblock %}

{% block content %}
<div class="container">
    <h1>Flask Form Validation</h1>
    <hr>
    <form method="POST">
        {{ form.csrf_token }}
        {{ wtf.form_field(form.name, class="form-control") }}
        {{ wtf.form_field(form.submit, class="btn btn-primary") }}
    </form>
</div>
{% endblock %}

在上面的代码中,我们首先将bootstrap/base.html扩展为基本模板。然后,我们将bootstrap/wtf.html作为wtf引入,以便能够使用样式化的表单字段。

content块中,我们创建一个包含表单的容器,并使用wtf.form_field呈现表单字段。我们还在表单中添加了form.csrf_token字段,用于防止跨站请求伪造。

最后,我们需要运行应用程序。在终端中进入文件所在的目录,并运行以下命令:

python app.py

现在,你可以在浏览器中访问 http://localhost:5000,看到一个包含表单的页面。尝试提交表单,如果字段为空,你将收到一个错误消息。如果字段不为空,你将被重定向到显示成功消息的页面,并包含你输入的姓名。

通过整合Flask-WTFormsFlask-Bootstrap,我们能够轻松地实现表单验证,并使表单具有美观的样式。