DjangoでアップロードファイルをS3に置くときの設定メモ

適当にImageFieldを持つmodelを作る

models.py

class Image(models.Model):
    file = models.ImageField(upload_to='img/%Y%m%d')
    memo = models.CharField(max_length=255)


S3に置くためにdjango-storagesを使う
たぶん以下が最小限の設定

settings.py

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_ACCESS_KEY_ID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
AWS_SECRET_ACCESS_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx'
AWS_STORAGE_BUCKET_NAME = 'xxxxxxx'

バケット名や設定はAWSのアカウントページで確認しておく


これだけでアップロードしたファイルは指定したS3のバケットに保存された
便利便利


さらに以下を追加して

STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATIC_URL = 'http://' + AWS_STORAGE_BUCKET_NAME + '.s3.amazonaws.com/'
ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'

python manage.py collectstaticを実行すると、jsやcssなどの静的ファイルがS3上にコピーされ、そちらが参照されるようになる