使用backblaze b2作为存储的Django应用程序。
django-backblaze-b2的Python项目详细描述
django-backblaze-b2型
使用Backblaze's B2 APIs的Django存储后端。在
如何使用
- 从这个存储库安装,或从PyPi安装:
pip install django-backblaze-b2
由于python只需要或更大的注释,因此需要使用python或更大的注释。PRs欢迎:) - 配置您的django
settings
。绝对最小配置为:
BACKBLAZE_CONFIG={"application_key_id":os.getenv("BACKBLAZE_KEY_ID"),# however you want to securely retrieve these values"application_key":os.getenv("BACKBLAZE_KEY"),}
理论上,现在可以将基本存储类称为存储类。
e、 g
公共/登录/专用存储
- 将
django_backblaze_b2
添加到您的INSTALLED_APPS
- 将URL添加到根
urls.py
中的urlpatterns
:
urlpatterns=[...path('',include('django_backblaze_b2.urls')),]
配置
您可能需要使用自己的存储桶名称,或设置进一步的配置,如延迟授权/验证,或指定文件元数据。
有关所有选项,请参阅the options。
您可以修改设置dict,但还可以使用存储类的opts
关键字参数覆盖任何设置。在
要指定不同的存储桶以用于公共、已登录的人员存储,可以设置
specificBucketNames
设置dict的属性
为什么
已经有几个Django存储包支持B2,但是没有一个能满足我的需求。这些是:
- django-storages
- 大型社区参与✅ 在
- 久经考验✅ 在
- Second-class support通过Apache Libcloud❌ 在
- 在配置和实际使用中断开连接❌ 在
- 低周转率公关清单❌ 在
- django-b2
- 类似于这个项目的目标,围绕着官方的backblazesdk✅ 在
- 混合目标(存储、脚本)❌ 在
- 测试??❌ 在
- django-backblazeb2-storage
- 简单配置✅ 在
- 不是基于pythonsdk(可能更难跟上版本变化)❌ 在
- 测试??❌ 在
S3兼容API
Backblazed可以与S3-compatible API一起使用 这很好,但是大多数包都使用旧版本的s3api(v2)。Backblaze使用v4。在
此套餐提供的功能
- 类型批注
- 测试
- 不需要任何黑客攻击就可以绕过API缺陷(任何黑客行为都不会暴露在API中)
- 对公共/私有文件的支持,通过Django用户权限进行限制
工作原理
django.core.files.storage.Storage
类的一个简单实现提供了对Django应用程序中存储行为的处理- 三个url路由将附加到应用程序的根目录:
/b2/
/b2l/
/b2s/
这些路由充当请求者和backblaze b2 API之间的代理/中介。public/b2/
允许从私有bucket中公开文件,登录和人员路由将执行django应用程序的已知验证,以防止未经授权的访问。在
Gotchas
- 原始文件名+任何上载路径都存储在数据库中。因此,您的列名必须有足够的长度来容纳它(来自
FileSystemStorage
的不变行为) - 从
PublicStorage
、LoggedInStorage
或StaffStorage
检索文件时,您不能覆盖"bucket"
或授权选项,否则当应用程序代理文件下载时,它将无法从相应的bucket中检索文件。在 - 如果bucket不是公共的,那么仅仅使用
LoggedInStorage
或{}不足以保护文件。如果任何个人获得了对这些文件的文件id/url的访问权,那么它们周围就没有身份验证。由实现者来确保其应用程序的安全性。在 - 一旦上传了文件,并且有人获得了一个文件url(例如http://djangodomain.com/b2l/uploads/image.png),将不再检查模型中的文件。这意味着,如果您在多个用例之间共享bucket,理论上可以找到不属于django应用程序的发现,或者类似地,如果您删除/更改您的模型,文件仍然可以已下载。如果这对你很重要,可以考虑使用一个类似django-cleanup的应用程序
贡献
欢迎投稿!在
- 请确保测试覆盖率不会以有意义的方式减少。在
- 确保格式符合(
make lint
) - 使用conventional commits
为发展而设
需要
- Python
- pyenv-对齐本地版本
- GNU制造
- (可选)docker-运行示例应用程序
版本兼容性提示
Ver | Status | EOL |
---|---|---|
3.9 | bugfix | 2025-10 |
3.8 | bugfix | 2024-10 |
3.7 | security | 2023-06-27 |
3.6 | security | 2021-12-23 |
运行
make setup
- 您可以使用
make run-django
运行django来测试django应用程序。在 - 您可以使用
make test
运行测试 - 您可以使用
make test-coverage
查看测试覆盖率,然后在终端中看到, 打开test/htmlcov/index.html
或者在您喜欢的IDE中使用cov.xml
,比如VSCode
释放
make publish-to-pypi
清理
make cleanup
- 项目
标签: