Опубликовано Оставить комментарий

Django storage and s3

Сталкиваясь в процессе разработки с необходимостью иметь несколько экземпляров веб-приложения, часто ощущается необходимость иметь статику и медиа файлы в одном месте. Самый легкий способ реализовать эту это возможность — это пользоваться облачным хранилищем, например, таким как s3 от amazon.

Предполагаю, что у вас уже есть аккаунт aws и вы знаете где найти настройки для s3. Буквально пару строк кода и ваши данные будут храниться во внешнем хранилище:

setting.py
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_ACCESS_KEY_ID = '...'
AWS_SECRET_ACCESS_KEY = '...'
AWS_STORAGE_BUCKET_NAME = '...'
AWS_QUERYSTRING_AUTH = Falsemodels.py

models.py
from django.core.files.storage import default_storage as s3_storage

class Model(models.Model):
    title = models.CharField(max_length=50)
    image = models.ImageField(storage=s3_storage, upload_to='dir/')

Значение FalseдляAWS_QUERYSTRING_AUTH удаляет параметры аутентификации из сгенерированного адреса. Это применимо когда у вас публичный S3.

Для того, чтобы вся статика хранилась там же, на s3, необходимо будет выполнить команду

python manage.py collectstatic