📜  发布图像 Flask - Python (1)

📅  最后修改于: 2023-12-03 14:50:36.261000             🧑  作者: Mango

发布图像 Flask - Python

在 Flask 应用程序中,你可以轻松地实现图像的上传和发布。图像可以作为文件上传到服务器,然后存储在文件系统或数据库中。在本文中,我们将展示如何使用 Flask 和 Python 发布图像。

上传图像

要上传图像,我们需要使用 Flask-WTF,它可以方便地处理表单和文件上传。

首先,我们需要通过 pip 安装 Flask-WTF:

$ pip install Flask-WTF

接下来,我们需要导入 Flask、Flask-WTF、Form 和 FileField:

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

然后,我们需要创建一个表单类,用于上传文件:

class ImageForm(FlaskForm):
    image = FileField('Image')

这个表单类包含一个 FileField,该字段将允许我们上传图像文件。

接下来,我们需要创建一个路由,允许用户上传图像:

@app.route('/', methods=['GET', 'POST'])
def upload():
    form = ImageForm()
    if form.validate_on_submit():
        image = form.image.data
        filename = secure_filename(image.filename)
        image.save(os.path.join(app.config['IMAGE_UPLOADS'], filename))
        return 'Image uploaded successfully!'
    return render_template('upload.html', form=form)

这个路由用于处理 GET 和 POST 请求。当用户 GET 请求时,我们将呈现一个表单,允许用户上传图像。当用户 POST 请求时,我们可以通过表单类处理图像文件。

在这个路由中,我们首先创建一个 ImageForm 对象,并检查它是否通过验证。如果验证成功,我们可以处理上传的图像。我们使用 secure_filename 函数来确保 filename 是安全的。然后,我们将图像保存到 app.config['IMAGE_UPLOADS'] 目录中。最后,我们返回一个简单的字符串,告诉用户图像已经上传成功。

我们使用 render_template 函数呈现一个 upload.html 模板,该模板将包含我们的表单:

{% extends 'base.html' %}

{% block content %}
    <h1>Upload Image</h1>
    <form method="POST" action="/" enctype="multipart/form-data">
        {{ form.hidden_tag() }}
        {{ form.image.label }} {{ form.image }}
        <br><br>
        <input type="submit" value="Submit">
    </form>
{% endblock %}

在这个模板中,我们定义一个简单的表单,允许用户上传图像。我们使用 enctype="multipart/form-data" 来支持文件上传。

显示图像

要显示我们上传的图像,我们需要使用 Flask 的 send_from_directory 函数。这个函数将允许我们从文件系统中提供静态文件。

首先,我们需要导入 send_from_directory:

from flask import send_from_directory

然后,我们可以创建一个路由,用于显示上传的图像:

@app.route('/uploads/<filename>')
def uploaded_file(filename):
    return send_from_directory(app.config['IMAGE_UPLOADS'], filename)

在这个路由中,我们将 filename 作为参数。然后,我们使用 send_from_directory 函数返回上传的图像。

最后,在我们的 upload.html 模板中,我们可以添加一个 img 标签,用于显示上传的图像:

<img src="{{ url_for('uploaded_file', filename=form.image.data.filename) }}" alt="">

注意,我们在这个模板中使用了 url_for 函数,它可以生成一个路由地址,用于将图像的 URL 传递给 img 标签。

总结

在本文中,我们展示了如何使用 Flask 和 Python 来上传和显示图像。我们使用了 Flask-WTF 来处理上传的文件,并使用 send_from_directory 函数来返回上传的图像。这个例子展示了 Flask 如何简化图像上传和发布的过程。