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

PythonFlask-WTF实现文件上传功能

发布时间:2023-12-11 06:13:40

在Python的Web开发中,Flask是一种很流行的Micro Web框架,它非常灵活和易于使用。而Flask-WTF是Flask的一个扩展,它提供了一种简单而强大的方式来处理Web表单。

在很多Web应用程序中,文件上传是一个很常见的功能。Flask-WTF提供了一个名为FileField的类,可以用来处理文件上传。下面将介绍如何在Flask中使用Flask-WTF来实现文件上传功能,并给出一个使用例子。

首先,你需要安装Flask和Flask-WTF,可以通过pip来安装:

$ pip install flask
$ pip install flask-wtf

然后,在你的Flask应用程序中导入所需的模块:

from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from wtforms import FileField
from werkzeug.utils import secure_filename

接着,创建一个Flask应用程序,并设置一个秘钥:

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

然后,创建一个表单类,继承自FlaskForm。在表单类中,添加一个FileField字段用于文件上传:

class UploadForm(FlaskForm):
    file = FileField('Choose file')

接下来,创建一个路由来处理文件上传。在路由函数中,首先实例化表单类,并检查表单是否被提交。如果表单被提交,获取上传的文件并保存到指定文件夹中:

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    form = UploadForm()
    if form.validate_on_submit():
        file = form.file.data
        filename = secure_filename(file.filename)
        file.save('path/to/save/' + filename)
        return 'File uploaded!'
    return render_template('upload.html', form=form)

在上面的代码中,secure_filename函数可以确保上传的文件名是安全的。然后,使用save方法将文件保存到指定路径中。

最后,创建一个HTML模板来展示文件上传表单。在模板中,使用Flask-WTF提供的form属性来渲染表单:

<!DOCTYPE html>
<html>
<head>
    <title>File Upload</title>
</head>
<body>
    <h1>File Upload</h1>
    <form method="POST" enctype="multipart/form-data">
        {{ form.hidden_tag() }}
        {{ form.file.label }}
        {{ form.file }}
        <input type="submit" value="Upload">
    </form>
</body>
</html>

在上面的代码中,form.hidden_tag()用于生成一个隐藏字段,用于CSRF保护,确保表单是在你的网站上被提交的。

最后,运行Flask应用程序:

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

这样,你就可以在浏览器中访问你的应用程序,并进行文件上传了。

总结起来,使用Flask-WTF来实现文件上传功能非常简单。首先,在表单类中添加一个FileField字段;然后,在路由函数中处理文件上传;最后,在HTML模板中渲染表单。通过这种方式,你可以轻松地在你的Web应用程序中实现文件上传功能。

参考文档:

- Flask官方文档:https://flask.palletsprojects.com/

- Flask-WTF官方文档:https://flask-wtf.readthedocs.io/