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

使用Flask-WTF的FileField()上传文件并保存到指定目录

发布时间:2024-01-17 12:04:32

Flask-WTF是一个用于快速创建表单的Flask扩展。它提供了许多方便的字段类型,包括FileField,用于上传文件。

要使用Flask-WTF的FileField上传文件并保存到指定目录,需要执行以下步骤:

1. 安装Flask-WTF。可以使用以下命令在命令行中进行安装:

pip install flask-wtf

2. 导入所需的模块和类。在项目的Python文件中,导入Flask、Flask-WTF和FileField:

from flask import Flask
from flask_wtf import FlaskForm
from wtforms import FileField

3. 创建Flask应用和配置文件上传目录。在项目的Python文件中,创建Flask应用实例,并设置文件上传目录:

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = '/path/to/uploads'

这里将文件保存到了/path/to/uploads目录下,你可以根据自己的实际需求修改目录路径。

4. 创建表单类。在项目的Python文件中,创建一个表单类,继承自FlaskForm,并在表单类中添加FileField字段:

class UploadForm(FlaskForm):
    file = FileField('Upload File')

这里创建了一个名为UploadForm的表单类,其中包含一个名为file的FileField字段。

5. 在视图函数中处理上传文件。在项目的Python文件中,创建一个视图函数,负责处理表单的提交:

@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(os.path.join(app.config['UPLOAD_FOLDER'], filename))
        flash('File successfully uploaded')
        return redirect(url_for('upload_file'))
    return render_template('upload.html', form=form)

这里使用了Flask的路由装饰器@app.route来指定URL路径'/'和允许的请求方法。在视图函数中,首先实例化表单类,然后通过form.validate_on_submit()方法判断表单是否被提交。如果表单通过验证,取得上传的文件对象,通过secure_filename()函数获取安全的文件名,并将文件保存到指定目录。最后,使用flash()函数向模板传递成功上传文件的消息,并使用redirect()函数重定向到同一页面以实现文件上传后的刷新。

6. 创建模板。在项目的templates目录下,创建一个名为upload.html的模板文件,用于显示上传文件的表单:

{% extends "base.html" %}

{% block content %}
    <h1>Upload File</h1>
    {{ form.csrf_token }}
    {{ form.file.label }}
    {{ form.file }}
    <br>
    {{ form.submit() }}
{% endblock %}

这里使用了Jinja2模板引擎的语法,通过{{ form.field_name }}的方式渲染表单字段。

7. 运行Flask应用。在命令行中,进入项目的根目录,并执行以下命令启动Flask应用:

export FLASK_APP=app.py  # 指定要启动的Python文件名
export FLASK_ENV=development  # 指定开发环境
flask run  # 启动Flask应用

现在,访问http://localhost:5000即可上传文件并保存到指定目录。

上述就是使用Flask-WTF的FileField上传文件并保存到指定目录的流程和示例。通过这些步骤,你可以轻松地实现文件上传功能,并将上传的文件保存到你指定的目录中。