A storage system for Django that stores uploaded files in both the database and file system.
Django Binary Database Files
This is a storage system for Django that stores uploaded files in binary fields in the database. Files can be served from the database (usually a bad idea), the file system, or a CDN.
WARNING: It is generally a bad idea to serve static files from Django, but there are some valid use cases. If your Django app is behind a caching reverse proxy and you need to scale your application servers, it may be simpler to store files in the database.
- Django 2.2 - 4.0
Simply install via pip with:
pip install django-binary-database-files
binary_database_files to your
INSTALLED_APPS and add
DEFAULT_FILE_STORAGE = 'binary_database_files.storage.DatabaseStorage'
upload_to parameter is still used to synchronize the files stored
in the database with those on the file system, so new and existing fields
should still have a value that makes sense from your base media directory.
If you are adding the package to an existing Django installation with pre-existing files, run:
python manage.py database_files_load
Additionally, if you want to export all files in the database back to the file system, run:
python manage.py database_files_dump
Note, that when a field referencing a file is cleared, the corresponding file in the database and on the file system will not be automatically deleted. To delete all files in the database and file system not referenced by any model fields, run:
python manage.py database_files_cleanup
If true, when a file is uploaded or read from the database, a copy will be exported to your media directory corresponding to the FileField's upload_to path, just as it would with the default Django file storage.
If false, the file will only exist in the database.
Defines the method to use when rendering the web-accessible URL for a file.
URL_METHOD_1, assumes all files have been exported to the filesystem and uses the path corresponding to your
URL_METHOD_2, uses the URL bound to the
database_fileview to dynamically lookup and serve files from the filesystem or database.
In this case, you will also need to updates your
urls.pyto include the view that serves the files:
urlpatterns = [ # ... the rest of your URLconf goes here ... # Serve Database Files directly path(r"", include("binary_database_files.urls")), ]
urlmethod of the storage backend to return an absolute URL if provided.
Code should be linted with:
Tests require the Python development headers to be installed, which you can install on Ubuntu with:
sudo apt-get install python3-dev python3.6-dev
To run unittests across multiple Python versions, install:
sudo apt-get install python3.6-minimal python3.6-dev python3.7-minimal python3.7-dev
To run all tests:
export TESTNAME=; tox
To run tests for a specific environment (e.g. Python 3.6 with Django 2.2):
export TESTNAME=; tox -e py36-django22
To run a specific test:
export TESTNAME=.test_adding_file; tox -e py36-django22
To build and deploy a versioned package to PyPI, verify all unittests are passing, then increase (and commit) the version number in
binary_database_files/__init__.py and then run:
python setup.py sdist python setup.py sdist upload
Release history Release notifications | RSS feed
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Hashes for django-binary-database-files-1.0.17.tar.gz
Hashes for django_binary_database_files-1.0.17-py3-none-any.whl