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

使用PythonFlask和Flask-WTF创建并验证表单

发布时间:2023-12-11 09:31:34

使用Python Flask和Flask-WTF来创建和验证表单可以帮助我们轻松地生成表单,并提供验证功能,以确保用户输入的数据是合法和有效的。下面是一个简单的例子,演示如何使用Python Flask和Flask-WTF创建和验证表单。

首先,我们需要安装Flask和Flask-WTF库:

pip install flask
pip install flask-wtf

接下来,创建一个名为app.py的Python文件,并导入所需的库:

from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired

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

我们创建了一个Flask应用,定义了一个名为app的Flask对象,并设置了一个密钥(SECRET_KEY),用于在表单中确保数据的安全性。

接下来,我们定义了一个简单的表单类,继承自FlaskForm类。在该表单类中,我们定义了一个名为name的文本字段,并使用了DataRequired验证器,以确保该字段不为空。此外,我们还定义了一个名为submit的提交字段。

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

接下来,我们创建一个路由,用于处理表单的GET和POST请求:

@app.route('/', methods=['GET', 'POST'])
def index():
    form = MyForm()
    
    if form.validate_on_submit():
        name = form.name.data
        return f"Hello {name}!"
    
    return render_template('index.html', form=form)

在处理GET请求时,我们将表单对象传递给index.html模板,并在模板中使用它来生成表单。在处理POST请求时,我们会验证表单是否有效。如果验证通过,我们会获取数据并返回一个简单的欢迎消息,否则我们会将错误消息返回给用户。

最后,在根目录下创建一个名为index.html的模板文件,用于渲染表单:

<!DOCTYPE html>
<html>
<head>
    <title>Flask-WTF Form Example</title>
</head>
<body>
    <h1>Flask-WTF Form Example</h1>
    <form method="POST">
        {{ form.csrf_token }}
        {{ form.name.label }} {{ form.name }}
        {% for error in form.name.errors %}
            <span style="color: red;">{{ error }}</span>
        {% endfor %}
        <br><br>
        {{ form.submit }}
    </form>
</body>
</html>

在该模板中,我们使用{{ form.csrf_token }}生成一个隐藏字段,以确保请求是安全的。然后,我们使用{{ form.name.label }}和{{ form.name }}生成一个文本字段,并使用循环遍历错误消息,以便在字段下方显示错误消息。最后,我们使用{{ form.submit }}生成一个提交按钮。

现在,运行应用:

python app.py

打开浏览器并访问http://localhost:5000,你会看到一个包含一个名为"Name"的文本字段和一个提交按钮的表单。如果你尝试提交一个空的表单,你会看到一个错误消息。如果你填写了表单并提交,你会看到一个简单的欢迎消息。

这只是一个简单的示例,你可以根据自己的需求进行扩展和定制。Flask-WTF提供了许多其他功能和验证器,可以帮助我们构建更复杂和强大的表单。希望这个例子对你有所帮助!