📜  Flask –文件上传(1)

📅  最后修改于: 2023-12-03 15:00:46.751000             🧑  作者: Mango

Flask 文件上传

在开发 Web 应用程序时,多数情况下都需要支持文件上传功能。在 Flask 中,我们可以使用 Flask-WTF 中的 FileField 类来实现文件上传功能。本篇文章将向你展示如何使用 Flask 和 Flask-WTF 来实现文件上传功能。

安装 Flask-WTF

首先,我们需要安装 Flask-WTF 扩展。在终端中输入以下命令:

pip install Flask-WTF
创建 Flask 应用

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

from flask import Flask, render_template
from flask_wtf import FlaskForm
from flask_wtf.file import FileField, FileRequired

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your secret key'

其中,Flask 是 Flask 框架的核心类,render_template 用于渲染 HTML 模板,FlaskForm 是 Flask-WTF 中的表单基类,FileFieldFileRequired 用于处理文件上传。

创建表单

接下来,我们需要创建一个表单类,代码如下:

class MyForm(FlaskForm):
    file = FileField(validators=[FileRequired()])

其中,FileField 表示一个上传文件的表单字段,validators=[FileRequired()] 表示上传文件是必须的。

创建视图函数

接下来,我们需要在 Flask 中创建一个视图函数,用于处理文件上传:

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    form = MyForm()
    if form.validate_on_submit():
        f = form.file.data
        f.save('uploads/' + f.filename)
        return '文件上传成功'
    return render_template('index.html', form=form)

其中,form = MyForm() 创建表单实例,if form.validate_on_submit() 判断当表单提交时,执行文件上传操作,f.save('uploads/' + f.filename) 将上传的文件保存到指定目录中。

创建 HTML 模板

最后,我们需要创建一个 HTML 模板,用于呈现表单和展示上传文件成功信息:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>文件上传示例</title>
  </head>
  <body>
    <h1>文件上传示例</h1>
    <form action="/" method="POST" enctype="multipart/form-data">
      {{ form.csrf_token }}
      {{ form.file }}
      <button type="submit">上传</button>
    </form>
  </body>
</html>

其中,enctype="multipart/form-data" 表示表单中包含二进制数据,{{ form.csrf_token }} 用于生成 CSRF 令牌,以防止跨站点请求伪造攻击。

运行 Flask 应用

最后,我们输入以下命令启动 Flask 应用:

flask run

在浏览器中输入以下网址:

http://127.0.0.1:5000/

上传文件即可。

总结

在本文中,我们学习了如何使用 Flask 和 Flask-WTF 扩展来实现文件上传功能。通过上述步骤,你可以轻松地在你的 Flask 应用程序中支持文件上传功能。