使用backblaze b2作为存储的Django应用程序。

django-backblaze-b2的Python项目详细描述


django-backblaze-b2型

pypi versionpython versiondjango version

使用Backblaze's B2 APIs的Django存储后端。在

实现包装Official Python SDK

如何使用

  1. 从这个存储库安装,或从PyPi安装:pip install django-backblaze-b2 由于python只需要或更大的注释,因此需要使用python或更大的注释。PRs欢迎:)
  2. 配置您的djangosettings。绝对最小配置为:
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

^{pr2}$

公共/登录/专用存储

  1. django_backblaze_b2添加到您的INSTALLED_APPS
  2. 将URL添加到根urls.py中的urlpatterns
urlpatterns=[...path('',include('django_backblaze_b2.urls')),]

配置

您可能需要使用自己的存储桶名称,或设置进一步的配置,如延迟授权/验证,或指定文件元数据。
有关所有选项,请参阅the options
您可以修改设置dict,但还可以使用存储类的opts关键字参数覆盖任何设置。在

要指定不同的存储桶以用于公共、已登录的人员存储,可以设置 specificBucketNames设置dict的属性

为什么

已经有几个Django存储包支持B2,但是没有一个能满足我的需求。这些是:

  • django-storages
  • 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路由将附加到应用程序的根目录:
    1. /b2/
    2. /b2l/
    3. /b2s/ 这些路由充当请求者和backblaze b2 API之间的代理/中介。public /b2/允许从私有bucket中公开文件,登录和人员路由将执行django应用程序的已知验证,以防止未经授权的访问。在

Gotchas

  • 原始文件名+任何上载路径都存储在数据库中。因此,您的列名必须有足够的长度来容纳它(来自FileSystemStorage的不变行为)
  • PublicStorageLoggedInStorageStaffStorage检索文件时,您不能覆盖"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-运行示例应用程序

版本兼容性提示

VerStatusEOL
3.9bugfix2025-10
3.8bugfix2024-10
3.7security2023-06-27
3.6security2021-12-23

运行

  1. make setup
  • 您可以使用make run-django运行django来测试django应用程序。在
  • 您可以使用make test运行测试
  • 您可以使用make test-coverage查看测试覆盖率,然后在终端中看到, 打开test/htmlcov/index.html 或者在您喜欢的IDE中使用cov.xml,比如VSCode

释放

  1. make publish-to-pypi

清理

  1. make cleanup

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaEclipseMars没有保存首选项   java梯度同步失败:原因:启动失败:   java如何从嵌套的JSON获取数据?   java如何判断可观察对象中的任何对象满足一个条件?   java将字符串转换为保持相同值的byte[]数组   java有没有办法绕过AuditingEntityListener为测试设置数据?   从/usr/share/java中解析linux JAR依赖关系   安卓 My java函数抛出nullpointerexception?   java Gradle使用正确版本的依赖项   JBoss和Java6中带注释的WebService中的web服务ClassCastException   java如何修复codename one中的简单逻辑错误?   java如何迭代矩阵的索引?   java如何在JPanel不可见时将其保存为图像?   java HashMap如何在Kotlin中实现MutableMap接口?   javascript如何在单击后加载特定片段?   EclipseJava为纳什均衡获取所有玩家/策略组合   JavaSpring:Web服务REST在JSON上产生双反斜杠   java为什么ServletContext#getRealPath(“/”)返回相对路径?   java当我的游戏应该重新启动时,我应该如何处理重置SurfaceView和线程?