跳转到主要内容

为Flask提供灵活高效的文件上传处理

项目描述

CI Status https://coveralls.io/repos/github/jugmac00/flask-reuploaded/badge.svg?branch=master PyPI PyPI - Python Version https://img.shields.io/pypi/l/flask-reuploaded

Flask-Reuploaded

Flask-Reuploaded为Flask提供文件上传功能。

关于此包的说明

这是一个独立维护的版本,基于原始版本的0.2.1,但也包括了至少四年未发布的更改,至少没有发布到PyPI。

值得注意的是对Werkzeug API更改的修复。

目标

  • 提供对Flask-Uploads的稳定替代品

  • 恢复此广泛使用的包的势头

  • 提供可工作的PyPI包

从Flask-Uploads迁移指南

Flask-Reuploaded与Flask-Uploads之间的不兼容性

如前所述,与Flask-Uploads保持兼容是本项目的目标之一。

尽管如此,存在以下已知的不兼容性

  • patch_request_class辅助函数已被删除;该函数仅适用于Flask 0.6及以下版本。从那时起,您可以使用Flask自己的MAX_CONTENT_LENGTH环境变量,因此您不会从传入的请求数据中读取超过这么多字节。

  • 已停用上传图片的自动服务功能;这是一个文档记录不佳的“功能”,甚至可能导致不希望的数据泄露;如果您想再次启用此功能,需要设置 UPLOADS_AUTOSERVE=True

卸载和安装

如果您已使用 Flask-Uploads 并希望迁移到 Flask-Reuploaded,您只需安装 Flask-Reuploaded 而不是 Flask-Uploads

就是这些!

因此,如果您使用 pip 安装软件包,而不是…

$ pip install `Flask-Uploads`  # don't do this! package is broken

…只需做…

$ pip install `Flask-Reuploaded`

Flask-Reuploaded 是一个即插即用的替代品。

这意味着您不需要更改任何一行代码。

安装

$ pip install Flask-Reuploaded

入门

创建一个 UploadSet

from flask_uploads import IMAGES

photos = UploadSet("photos", IMAGES)

配置您的 Flask 应用和此扩展

app.config["UPLOADED_PHOTOS_DEST"] = "static/img"
app.config["SECRET_KEY"] = os.urandom(24)
configure_uploads(app, photos)

在视图函数中使用 photos

photos.save(request.files['photo'])

以下是一个完整的示例。

文档

您可以在以下位置找到文档:

https://flask-reuploaded.readthedocs.io/zh/latest/

您可以在本地生成文档

tox -e docs

您可以更新用于生成文档的依赖项

tox -e upgradedocs

最小示例应用程序

应用程序代码,例如 main.py

import os

from flask import Flask, flash, render_template, request
# please note the import from `flask_uploads` - not `flask_reuploaded`!!
# this is done on purpose to stay compatible with `Flask-Uploads`
from flask_uploads import IMAGES, UploadSet, configure_uploads

app = Flask(__name__)
photos = UploadSet("photos", IMAGES)
app.config["UPLOADED_PHOTOS_DEST"] = "static/img"
app.config["SECRET_KEY"] = os.urandom(24)
configure_uploads(app, photos)


@app.route("/", methods=['GET', 'POST'])
def upload():
    if request.method == 'POST' and 'photo' in request.files:
        photos.save(request.files['photo'])
        flash("Photo saved successfully.")
        return render_template('upload.html')
    return render_template('upload.html')

upload.html 的 HTML 代码

<!doctype html>
<html lang=en>
<head>
    <meta charset=utf-8>
    <title>Flask-Reuploaded Example</title>
</head>
<body>
    {% with messages = get_flashed_messages() %}
    {% if messages %}
    <ul class=flashes>
    {% for message in messages %}
        <li>{{ message }}</li>
    {% endfor %}
    </ul>
    {% endif %}
    {% endwith %}

<form method=POST enctype=multipart/form-data action="{{ url_for('upload') }}">
    <input type=file name=photo>
    <button type="submit">Submit</button>
</form>
</body>
</html>

项目结构

项目结构将如下所示…

 tree -I "__*|h*"
.
├── main.py
├── static
   └── img
└── templates
    └── upload.html

运行示例应用程序

为了运行应用程序,您必须输入以下命令…

 export FLASK_APP=main.py

 flask run

然后,将您的浏览器指向 http://127.0.0.1:5000/

贡献

欢迎贡献。

请查看开放问题

还有一个简短的贡献指南

变更日志

1.4.0(未发布)

  • 修复 pytest 的弃用警告

  • 放弃对 Python 3.6/3.7 的支持

  • 添加对 Python 3.12 的支持

  • 升级构建文档的依赖项

1.3.0 (2022.12.20)

  • 改进文档(#133

  • 放弃对 Python 3.6 的支持

  • 添加对 Python 3.11 的支持

  • 更新构建文档的依赖项

1.2.0 (2021.11.07)

  • 添加上下文到覆盖率报告

  • 将文档依赖项固定以防止未来的破坏

  • 修复与最近发布的 Flask 2.0.1 相关的 typing 错误(mypy)

  • 添加对 Python 3.10 的支持

1.1.0 (2021.05.09)

  • 让类型检查器意识到此库正在使用类型注解

1.0.0 (2021.04.07)

  • 将测试覆盖率提高到 100%

  • 使用官方 Pallets 主题为文档

  • 移除已弃用的 patch_request_class 辅助函数;使用 MAX_CONTENT_LENGTH 代替。

  • autoserve 现已默认停用,需要通过设置 UPLOADS_AUTOSERVE=True 显式激活

0.5.0

  • 改进示例应用的文档

  • 记录令人惊讶的 autoserve 功能

  • 当使用未显式配置的 autoserve 时发出警告

0.4.0

  • 添加类型注解

  • 放弃对 Python 2 和 Python 3.5 的支持(#8

  • 弃用 patch_request_class#43

  • 使用 src 目录作为源代码(#21

  • 添加 tox env 以检查-python-versions(#20

  • 添加 flake8-bugbear

  • 添加简短的贡献指南(#6

  • 添加 入门#59

  • 删除损坏的示例并添加最小示例到 README(#15

  • 添加对 Python 3.9 的支持

  • 使用 gh actions 而不是 Travis CI

0.3.2

  • 更新文档(#5

    • 更新 docs/index.rst

    • 使用蓝色 ReadTheDocs 主题

    • 更新 Sphinx 配置

    • 将文档链接添加到 setup.py,以便在 PyPi 上显示

    • 在 README 文件中添加有关文档的说明

    • 删除旧主题文件

  • 配置 isort 以强制使用单行导入

0.3.1

  • 在 README 中添加徽章 (# 31)

  • Flask-Uploads 添加迁移指南到 Flask-Reuploaded (#11)

  • 添加打包指南 (#28)

  • 更新 README 中的安装说明

0.3

除了包含来自原始包的四年的未发布更改外,最值得注意的是修复了 Werkzeug API 变更,以下是在分叉原始包之后发生的变化。

  • 将包从 Flask-Uploads 重命名为 Flask-Reuploaded (#10)

  • 更新 setup.py (#12)

  • 开始使用 pre-commit.com (#4)

  • 更新 README (#14)

  • 设置 CI (Travis) (#3)

  • 修复损坏的测试 (#13)

  • 使用 pytest 代替不再维护的 nose (#2)

  • 添加变更日志并开始跟踪更改 (#1)

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

Flask-Reuploaded-1.4.0.tar.gz (32.7 kB 查看哈希值)

上传

构建分布

Flask_Reuploaded-1.4.0-py3-none-any.whl (14.6 kB 查看哈希值)

上传 Python 3

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面