跳转到主要内容

Django的存储系统,可以在数据库和文件系统中存储上传的文件。

项目描述

Django 二进制数据库文件

Build Status

这是一个Django存储系统,它将上传的文件存储在数据库的二进制字段中。文件可以从数据库(通常不是一个好主意)、文件系统或CDN中提供服务。

警告:从Django中提供静态文件通常不是一个好主意,但有一些有效用例。如果您的Django应用程序后面有一个缓存反向代理,并且您需要扩展应用程序服务器,那么将文件存储在数据库中可能更简单。

基于Kimetricarhunwickschrisspenbfirsh的django-database-files,但已更新以与Django 2.2-4.0、Python 3.6+兼容,并使用二进制字段进行存储。

需求

  • Django 2.2 - 4.0

安装

简单通过pip安装:

pip install django-binary-database-files

用法

settings.py 文件中,将 binary_database_files 添加到您的 INSTALLED_APPS 中,并添加以下行

DEFAULT_FILE_STORAGE = 'binary_database_files.storage.DatabaseStorage'

注意,仍然使用 upload_to 参数来同步数据库中存储的文件与文件系统上的文件,因此新字段和现有字段仍然应该具有从您的媒体基本目录中可以获得意义的值。

如果您正在将包添加到已存在预存文件的现有Django安装中,请运行

python manage.py database_files_load

此外,如果您想将数据库中的所有文件导出到文件系统,请运行

python manage.py database_files_dump

注意,当清除引用文件的字段时,数据库和文件系统上的对应文件不会被自动删除。要删除数据库和文件系统中所有未由任何模型字段引用的文件,请运行

python manage.py database_files_cleanup

设置

  • DB_FILES_AUTO_EXPORT_DB_TO_FS = True|False (默认 True)

    如果为真,当文件上传或从数据库读取时,会将其副本导出到与FileField的upload_to路径对应的媒体目录,就像使用默认的Django文件存储一样。

    如果为假,文件只存在于数据库中。

  • DATABASE_FILES_URL_METHOD = 'URL_METHOD_1'|'URL_METHOD_2' (默认 'URL_METHOD_1')

    定义在渲染文件的Web访问URL时使用的方法。

    如果为 URL_METHOD_1,则假设所有文件都已导出到文件系统,并使用与您的 settings.MEDIA_URL 对应的路径。

    如果为 URL_METHOD_2,则使用绑定到 database_file 观看的URL来动态查找和从文件系统或数据库提供文件。

    在这种情况下,您还需要更新您的 urls.py 以包括提供文件的视图

      urlpatterns = [
          # ... the rest of your URLconf goes here ...
    
          # Serve Database Files directly
          path(r"", include("binary_database_files.urls")),
      ]
    
  • DATABASE_FILES_BASE_URL

    允许存储后端的 url 方法在提供时返回绝对URL。

开发

应使用

./lint.sh

测试需要安装Python开发头文件,您可以在Ubuntu上使用以下命令安装

sudo apt-get install python3.12-minimal python3.12-dev

要跨多个Python版本运行unittests,请安装

sudo apt-get install python3.10-minimal python3.10-dev python3.11-minimal python3.11-dev python3.12-minimal python3.12-dev

要运行所有 测试

export TESTNAME=; tox

要为特定环境运行测试(例如Python 3.12与Django 5.0)

export TESTNAME=; tox -e py312-django50

要运行特定的测试

export TESTNAME=.test_adding_file; tox -e py312-django50

要构建和部署一个版本化的包到PyPI,请验证 所有unittests都通过,然后增加(并提交)binary_database_files/__init__.py 中的版本号,然后运行

python setup.py sdist bdist_wheel
twine check dist/*
twine upload dist/*

项目详情


下载文件

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

源分布

django-binary-database-files-1.0.18.tar.gz (35.4 kB 查看散列)

上传时间

由以下支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面