- AWS S3와 Django(장고) 연동2023년 03월 15일 18시 01분 22초에 업로드 된 글입니다.작성자: 각수짱728x90반응형SMALL
프로젝트에서 S3 저장소를 사용하는방법
- S3를 서버 컴퓨터에 NFS로 마운트 ←
추천하지않는다 - django의 기능을 이용해 S3를 사용
AWS S3과 Django 연동
python에서 장고 생성후 터미널에 입력
pip install boto3 django-storages
boto3는 AWS SDK for Python으로, Python으로 AWS 서비스를 사용하기 위한 라이브러리다. AWS에 제공되는 다양한 서비스를 관리하고 사용하기 위한 API들을 제공한다.
django-storages는 Django 웹 애플리케이션에서 파일 스토리지를 쉽게 다룰 수 있도록 도와주는 라이브러리로, 다양한 스토리지 백엔드(로컬, AWS S3 등)를 지원하여 각각의 스토리지를 쉽게 전환할 수 있다. S3 스토리지와 같은 외부 스토리지를 사용하려면 boto3와 함께 사용한다.settings.py에서 s3연동 및 INSTALLED_APPS 추가
INSTALLED_APPS = [ ... 'app01', #자신이 생성한 어플리케이션 'corsheaders', 'storages', ] ... TEMPLATES = [ { ... 'DIRS': [BASE_DIR / 'templates'], ... }, ] ... DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'db1', 'USER': 'admin', 'PASSWORD': 'qwer1234', 'HOST': '200.200.200.139', 'PORT': '3306', 'OPTIONS': { 'init_command': 'SET sql_mode="STRICT_TRANS_TABLES"' } } } ... # AWS Setting AWS_REGION = '' #AWS서버의 지역 AWS_STORAGE_BUCKET_NAME = '' #생성한 버킷 이름 AWS_ACCESS_KEY_ID = '' #액서스 키 ID AWS_SECRET_ACCESS_KEY = '' #액서스 키 PW #버킷이름.s3.AWS서버지역.amazonaws.com 형식 AWS_S3_CUSTOM_DOMAIN = '%s.s3.%s.amazonaws.com' % (AWS_STORAGE_BUCKET_NAME, AWS_REGION) # Static Setting STATIC_URL = "https://%s/static/" % AWS_S3_CUSTOM_DOMAIN STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' # Media Setting MEDIA_URL = "https://%s/meida/" % AWS_S3_CUSTOM_DOMAIN DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' # Default primary key field type # https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
그리고 터미널에서 입력
python .\manage.py collectstatic
이런 값이 출력되면 S3과 django연동 성공
버킷에서 admin/ 생성된걸 확인 할 수 있다
Django에서 업로드시 S3로 저장후 출력
models.py에 작성
class Picture(models.Model): img = models.ImageField(upload_to="", blank=True)
urls.py에 작성
... import app01.views urlpatterns = [ path('admin/', admin.site.urls), path('register/', app01.views.register), path('', app01.views.main), ]
views.py에 작성... from app01.models import Picture def main(request): pictures = Picture.objects.all() return render(request, 'main.html', {'result': pictures}) def register(request): if request.method == 'GET': return render(request, 'register.html') elif request.method == 'POST': images = request.FILES.getlist("image") for image in images: picture = Picture() picture.img = image picture.save() return redirect('/')
templates폴더안 main.html 작성
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% if result %} {% for picture in result %} <img src="https://gaksu-myawsbucket.s3.ap-northeast-2.amazonaws.com/{{ picture.img }}"> {% endfor %} {% endif %} </body> </html>
templates폴더안 register.html 작성
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form method="post" enctype="multipart/form-data"> {% csrf_token %} <input type="file" multiple name="image"> <button>업로드</button> </form> </body> </html>
Django실행
python .\manage.py runserver
웹 브라우저에서 127.0.0.1:8000/register/ 접속후 아무 이미지 업로드웹 브라우저에서 127.0.0.1:8000 접속후 이미지 확인
웹 브라우저 개발자 도구에서도 이미지 소스 주소가 S3으로 되어있다
AWS Amazon S3 → 버킷 → 방금 생성한 버킷에서 확인 가능
728x90반응형LIST'AWS' 카테고리의 다른 글
AWS EC2 EBS 디스크 볼륨 추가 (0) 2023.03.16 AWS S3 정적 웹 사이트 호스팅 (0) 2023.03.16 AWS S3 버킷 생성 및 사용 (0) 2023.03.15 AWS AMI 이미지 생성 (0) 2023.03.14 AWS VPC 네트워크 설정 (1) 2023.03.14 이전글이 없습니다.댓글 - S3를 서버 컴퓨터에 NFS로 마운트 ←