https://github.com/dlrsp/django-custom-storage
Django application provide custom storage uses S3 and Compressor
https://github.com/dlrsp/django-custom-storage
Last synced: 10 months ago
JSON representation
Django application provide custom storage uses S3 and Compressor
- Host: GitHub
- URL: https://github.com/dlrsp/django-custom-storage
- Owner: DLRSP
- License: mit
- Created: 2023-09-24T11:39:08.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2025-07-07T11:12:35.000Z (about 1 year ago)
- Last Synced: 2025-08-25T07:21:09.739Z (11 months ago)
- Language: Python
- Size: 730 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: .github/CODE_OF_CONDUCT.md
- Codeowners: CODEOWNERS
- Security: .github/SECURITY.md
Awesome Lists containing this project
README
# django-custom-storage [](https://pypi.python.org/pypi/django-custom-storage)
[](https://pypi.python.org/pypi/django-custom-storage)
[](https://pypi.python.org/pypi/django-custom-storage)
[](https://pypi.python.org/pypi/django-custom-storage)
[](https://pypi.python.org/pypi/django-custom-storage)
[](https://pypi.python.org/pypi/django-custom-storage)
[](https://pypi.python.org/pypi/django-custom-storage)
## GitHub  
## Test [](https://codecov.io/github/DLRSP/django-custom-storage?branch=main) [](https://results.pre-commit.ci/latest/github/DLRSP/django-custom-storage/main) [](https://github.com/DLRSP/django-custom-storage/actions/workflows/ci.yaml)
## Check Demo Project
* Check the demo repo on [GitHub](https://github.com/DLRSP/example/tree/django-custom-storage)
## Requirements
- Python 3.8+ supported.
- Django 3.2+ supported.
## Setup
1. Install from **pip**:
```shell
pip install django-custom-storage
```
2. Modify `settings.py` by adding the app to `INSTALLED_APPS`:
```python
INSTALLED_APPS = [
# ...
"compressor",
"custom_storage",
# ...
]
```
3. Finally, Modify `settings.py` by adding the needed configurations:
```python
# ...other setting...
# Media files (Uploaded Images, Documents, Video, Audio)
MEDIA_ROOT = '/var/opt/your_project_name/mediaroot/'
# Static files (Fonts, CSS, JavaScript, Icons, Theme's Images)
STATIC_URL = '/static/'
STATIC_ROOT = '/var/cache/your_project_name/staticroot/'
# Example: cdn.your_project_bucket_name.com
AWS_STORAGE_BUCKET_PREFIX = "cdn"
AWS_STORAGE_BUCKET_NAME = "your_project_bucket_name"
AWS_STORAGE_BUCKET_TLD = "com"
# Access Key ID & Secret Access Key
AWS_ACCESS_KEY_ID = 'YOUR_PROJECT_AWS_ACCESS_KEY_ID'
AWS_SECRET_ACCESS_KEY = 'YOUR_PROJECT_AWS_SECRET_ACCESS_KEY'
# ...other setting...
# START - Compress and Upload on S3
import os
import sys
import datetime
# Add option to FORCE_LOCAL_STORAGE
# https://www.mslinn.com/django/1300-django-aws-control.html
if "--force-local-storage" in sys.argv:
print("AWS datastore disabled; using local storage for assets instead.")
FORCE_LOCAL_STORAGE = True
sys.argv.remove("--force-local-storage")
else:
print("Using AWS datastore for assets.")
FORCE_LOCAL_STORAGE = False
if not FORCE_LOCAL_STORAGE:
DEFAULT_FILE_STORAGE = 'custom_storage.storage.MediaRootCachedS3Storage'
if not os.getenv('RUN_COMPRESS', False):
STATICFILES_STORAGE = 'custom_storage.storage.StaticRootCachedS3Storage'
else:
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'compressor.finders.CompressorFinder',
)
COMPRESS_ROOT = STATIC_ROOT
AWS_S3_CUSTOM_DOMAIN = f"{AWS_STORAGE_BUCKET_PREFIX}.{AWS_STORAGE_BUCKET_NAME}.{AWS_STORAGE_BUCKET_TLD}"
STATIC_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/static/"
MEDIA_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/media/"
AWS_DEFAULT_ACL = 'public-read'
AWS_QUERYSTRING_AUTH = False
AWS_FILE_EXPIRE = 200
AWS_PRELOAD_METADATA = True
two_months = datetime.timedelta(days=61)
date_two_months_later = datetime.date.today() + two_months
expires = date_two_months_later.strftime("%A, %d %B %Y 20:00:00 GMT")
AWS_S3_OBJECT_PARAMETERS = {
'Expires': expires,
'CacheControl': 'max-age=%d' % (int(two_months.total_seconds()),),
}
COMPRESS_CSS_HASHING_METHOD = None
COMPRESS_CSS_FILTERS = [
'compressor.filters.css_default.CssAbsoluteFilter',
# 'compressor.filters.css_default.CssRelativeFilter',
'compressor.filters.cssmin.CSSMinFilter'
]
COMPRESS_JS_FILTERS = [
'compressor.filters.jsmin.JSMinFilter',
]
COMPRESS_OUTPUT_DIR = 'compressed_static'
COMPRESS_STORAGE = 'custom_storage.storage.StaticRootCachedS3Storage'
# END - Compress and Upload on S3
```
## Run Example Project
```shell
git clone --depth=50 --branch=django-custom-storage https://github.com/DLRSP/example.git DLRSP/example
cd DLRSP/example
python manage.py runserver
```
Now browser the app @ http://127.0.0.1:8000