为Flask提供灵活高效的文件上传处理
项目描述
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
0.3.2
更新文档(#5)
更新 docs/index.rst
使用蓝色 ReadTheDocs 主题
更新 Sphinx 配置
将文档链接添加到 setup.py,以便在 PyPi 上显示
在 README 文件中添加有关文档的说明
删除旧主题文件
配置 isort 以强制使用单行导入
0.3.1
0.3
除了包含来自原始包的四年的未发布更改外,最值得注意的是修复了 Werkzeug API 变更,以下是在分叉原始包之后发生的变化。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源分布
构建分布
Flask-Reuploaded-1.4.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2f04e788b925e7c2110c9451ea5993955607b01de272a9b041c6923000b58c7b |
|
MD5 | 09e6f1f08fb6ee63ae9423c73aa10718 |
|
BLAKE2b-256 | baf8ee264a233a0df7cdde32bc78e8309ceaa6f552bcf0f6038a28ab7187a0d1 |
Flask_Reuploaded-1.4.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 020af6cdcbbe9f9484a72007c0cdc39599c1076cd321d7dff56062dd8f58f7a3 |
|
MD5 | 1712db2d6456efca0759dbf3157778e5 |
|
BLAKE2b-256 | 18e0fe9c86554cf3eaa80a8160e84e1921e6dc5d77e39b7ddfe0efd30abc23e6 |