반응형
기본적으로 AWS S3 bucket을 만들어 두었다고 가정하고 진행한다.
AWS S3
Simple Storage Service로, 미디어, 정적 파일을 공유할 수 있는 서비스이다.
적용하기
1. django 설정하기
django에서 S3를 연동시키기 위해서는 두가지 라이브러리를 설치해야한다.
pip install boto3
# boto3 : S3를 사용하기 위한 모듈이다.
pip install django-storages
# django-storages : 다양한 저장소를 사용하기 위한 모듈이다.
즉, django-storages를 통해 boto3를 사용한다.
이렇게 라이브러리를 설치 했으면 settings.py를 설정해주어야 한다.
settings.py
# 작업환경에 따라 다를 수 있으니 주의
# 추가 기능 사용을 위해 다운받은 앱
THIRD_PARTY_APPS = [
storages, # 이 코드를 추가해준다.
]
# 인스톨한 앱 = 기본 설치 앱 + 다운받은 앱 + 내가 설치한 앱
INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + PROJECT_APPS
#############
# AWS
AWS_S3_ACCESS_KEY_ID = os.environ.get(
"AWS_S3_ACCESS_KEY_ID"
) # .csv 파일에 있는 내용을 입력 Access key ID
AWS_S3_SECRET_ACCESS_KEY = os.environ.get(
"AWS_S3_SECRET_ACCESS_KEY"
) # .csv 파일에 있는 내용을 입력 Secret access key
AWS_REGION = "ap-northeast-2"
###S3 Storages
AWS_STORAGE_BUCKET_NAME = os.environ.get("AWS_STORAGE_BUCKET_NAME") # 설정한 버킷 이름
AWS_S3_CUSTOM_DOMAIN = "%s.s3.%s.amazonaws.com" % (AWS_STORAGE_BUCKET_NAME, AWS_REGION)
AWS_S3_OBJECT_PARAMETERS = {
"CacheControl": "max-age=86400",
}
AWS_PUBLIC_MEDIA_LOCATION = "media/public"
DEFAULT_FILE_STORAGE = "config.asset_storage.MediaStorage"
AWS_PRIVATE_MEDIA_LOCATION = 'media/private'
PRIVATE_FILE_STORAGE = 'mysite.storage_backends.PrivateMediaStorage'
]
media파일
여기서 잠깐, Django에서 처리하는 데이터의 종류는 두 가지가 있다.(정적파일,동적파일) 이중 정적파일은 준비해둔 파일을 보여주는 static파일과 외부에서 사용자가 업로드하는 media파일로 나눌 수 있다. 간단한 설명에서 알 수 있듯이, media 파일이란 프로젝트에 업로드 되는파일을 말한다, 즉 media파일을 다루기 위해서 해야할 것이 있다.
- 업로드될 파일을 저장할 디렉토리경로 지정해주기
- url 지정
config > asset_storage.py
작업하고 있는 django project 폴더 config 폴더 안에 asset_storage.py 파일을 만든다.
그리고 그 안에 아래와 같이 내용을 채운다.
from django.conf import settings
from storages.backends.s3boto3 import S3Boto3Storage
class PublicMediaStorage(S3Boto3Storage):
location = settings.AWS_PUBLIC_MEDIA_LOCATION
file_overwrite = False
class PrivateMediaStorage(S3Boto3Storage):
location = settings.AWS_PRIVATE_MEDIA_LOCATION
default_acl = "private"
file_overwrite = False
custom_domain = False
models.py (예시파일)
from django.db import models
from django.conf import settings
from django.contrib.auth.models import User
from mysite.storage_backends import PrivateMediaStorage
class Document(models.Model):
uploaded_at = models.DateTimeField(auto_now_add=True)
upload = models.FileField()
class PrivateDocument(models.Model):
uploaded_at = models.DateTimeField(auto_now_add=True)
upload = models.FileField(storage=PrivateMediaStorage())
user = models.ForeignKey(User, related_name='documents'
각자의 모델에 맞게 views.py 파일을 설정하면 끝이다.
반응형
'DEVELOPMENT > django' 카테고리의 다른 글
[django] JWT 사용하기 (0) | 2020.11.28 |
---|---|
[django] restful-api 사용하기 (0) | 2020.11.28 |
[django] seed 편하게만드는 방법, django_seed (0) | 2020.10.16 |
[django] 유저 다중모델 (0) | 2020.10.16 |
[django] MySQL 연동하기 (0) | 2020.10.16 |