Django application provide custom storage uses S3 and Compressor.
Project description
django-custom-storage
GitHub
Test
Check Demo Project
- Check the demo repo on GitHub
Requirements
- Python 3.8+ supported.
- Django 3.2+ supported.
Setup
- Install from pip:
pip install django-custom-storage
- Modify
settings.py
by adding the app toINSTALLED_APPS
:
INSTALLED_APPS = [
# ...
"compressor",
"custom_storage",
# ...
]
- Finally, Modify
settings.py
by adding the needed configurations:
# ...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
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
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Close
Hashes for django-custom-storage-0.3.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | cea5667d84786b6304a24f7e9ba09ab5fda5dc610f36dd5aaf2275e042d0f2e6 |
|
MD5 | 01cb1e7b444596ec3b18fdfe18ea4593 |
|
BLAKE2b-256 | 95a6aed1168f2b0477f84c500d957ceddaaa848cd24bd218c66dbde5dfc5ea95 |
Close
Hashes for django_custom_storage-0.3.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8cad2a93281fe8461a1b9098a31583074109c849dbbaa5d95f29726cf6455097 |
|
MD5 | 27b9186bdcdbf5978cd2a1d2d8c9394b |
|
BLAKE2b-256 | 72e22401f471f9e0354795a6551417a964b90133fe32de58dc2cac9ababb0e59 |