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

PythonFlask-WTF文件上传篇

发布时间:2023-12-11 06:15:33

文件上传是Web开发中常见的功能之一,Flask框架结合WTForms库可以很方便地实现文件上传功能。本文将介绍如何使用Flask-WTF库进行文件上传,并给出一个完整的使用例子。

首先,我们需要安装Flask-WTF库。可以使用pip进行安装:

pip install flask-wtf

接下来,我们需要创建一个Flask应用。

from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from wtforms import SubmitField, FileField

app = Flask(__name__)
app.secret_key = 'SECRET_KEY'

在这个例子中,我们创建了一个Flask应用,并导入了必要的模块。

接下来,我们需要创建一个表单来处理文件上传。

class UploadForm(FlaskForm):
    file = FileField('选择文件')
    submit = SubmitField('上传')

在上面的代码中,我们创建了一个表单类UploadForm,其中包含一个文件字段file和一个提交按钮submit

接下来,我们需要创建一个视图函数来处理文件上传。

@app.route('/', methods=['GET', 'POST'])
def index():
    form = UploadForm()
    if form.validate_on_submit():
        file = request.files['file']
        filename = secure_filename(file.filename)
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
        return '文件上传成功!'
    return render_template('index.html', form=form)

在这个视图函数中,我们首先创建了一个UploadForm实例,并通过form.validate_on_submit()判断表单是否被提交。如果表单被提交,我们可以通过request.files获取上传的文件,并使用secure_filename函数对文件名进行处理,然后保存文件到指定路径中。最后,我们返回一个成功提示信息。

最后,我们需要创建一个HTML模板来渲染表单。

<!doctype html>
<html>
<head>
    <title>文件上传</title>
</head>
<body>
    <h1>文件上传</h1>
  
    <form method="POST" enctype="multipart/form-data">
        {{ form.hidden_tag() }}
        <div>
            {{ form.file.label }}
            {{ form.file() }}
        </div>
        <div>
            {{ form.submit() }}
        </div>
    </form>
</body>
</html>

在上面的HTML模板中,我们使用form.file.labelform.file()分别渲染文件字段的标签和控件。form.hidden_tag()用于渲染隐藏字段,form.submit()用于渲染提交按钮。

最后,我们需要添加一个上传文件的文件夹配置项。

app.config['UPLOAD_FOLDER'] = 'uploads'

在上面的代码中,我们将上传的文件保存到uploads文件夹中。

现在,我们可以运行Flask应用,并在浏览器中访问http://localhost:5000 来进行文件上传。上传的文件将会保存在指定的文件夹中。

这就是使用Flask-WTF库进行文件上传的简单示例。通过结合Flask和WTForms,我们可以快速简单地实现文件上传功能。