第5章:表单处理

5.1 Web表单的基本概念

Web表单是收集用户输入的一种方式。在Flask中,表单通常与HTML表单结合使用,并通过POST方法提交。

示例代码:HTML表单

<!-- templates/login.html -->
<form method="post" action="/login">
    <input type="text" name="username" placeholder="Username">
    <input type="password" name="password" placeholder="Password">
    <input type="submit" value="Login">
</form>
5.2 Flask-WTF扩展的使用

Flask-WTF是一个集成了WTForms的Flask扩展,它简化了表单的处理和验证。

示例代码:安装Flask-WTF

pip install Flask-WTF

示例代码:创建表单类

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from wtforms.validators import InputRequired

class LoginForm(FlaskForm):
    username = StringField('Username', validators=[InputRequired()])
    password = PasswordField('Password', validators=[InputRequired()])
5.3 表单验证和错误处理

表单验证确保用户输入的数据符合预期格式。如果验证失败,可以显示错误信息。

示例代码:表单验证

from flask import render_template, flash, redirect, url_for
from forms import LoginForm

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        # 处理登录逻辑
        return redirect(url_for('index'))
    return render_template('login.html', form=form)

if __name__ == '__main__':
    app.secret_key = 'your_secret_key'  # 需要设置secret_key

在模板中显示错误信息:

示例代码:显示错误信息

{% for error in form.username.errors %}
    <span style="color: red;">{{ error }}</span>
{% endfor %}
5.4 文件上传的处理

文件上传是Web表单的常见功能。Flask-WTF也支持文件上传,但需要配置一些额外的设置。

示例代码:创建支持文件上传的表单

from flask_wtf import FlaskForm
from wtforms import StringField, FileField
from wtforms.validators import InputRequired, FileAllowed

class UploadForm(FlaskForm):
    avatar = FileField('Avatar', validators=[
        InputRequired(),
        FileAllowed(['jpg', 'png'], 'Images only!')
    ])

示例代码:处理文件上传

from flask import request

@app.route('/upload', methods=['GET', 'POST'])
def upload():
    form = UploadForm()
    if form.validate_on_submit():
        file = request.files['avatar']
        # 保存文件逻辑
    return render_template('upload.html', form=form)

确保在配置文件中设置了MAX_CONTENT_LENGTH以限制上传文件的大小。

5.5 总结

本章介绍了Web表单的基本概念,以及如何使用Flask-WTF扩展来处理表单验证和文件上传。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部