텍스트와 다르게 이미지를 저장하려면 많은 수고가 든다.
1) Settings.py에서 이미지 파일을 저장할 베이스 폴더(media) 경로를 설정한다.
| MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, "media") | cs |
2) Urls.py에서 개발 중에 미디어 파일(이미지, 비디오 등)을 다루기 위한 세팅
(단, DEBUG 상태에서만 가능하도록 if문을 별도로 작성)
| from django.conf import settings from django.conf.urls.static import static if settings.DEBUG: urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) | cs |
3) Models.py에서 이미지 필드 만들기
| image = models.ImageField() | cs |
*이미지 필드 사용시 Pillow(https://pillow.readthedocs.io/en/latest/)라는 라이브러리 설치가 migrate 과정에서 요구된다.
(내가 올리는 이미지 파일의 포맷을 도와준다)
4) Forms.py에서 이미지 필드 지정하기
| class Form(ModelForm): class Meta: model = fields = ( 'image' ) | cs |
5) 템플릿에서 폼에 이미지 파일을 입력 받기 위해 이미지 전송을 위한 별도의 속성을 추가한다
| <form enctype="multipart/form-data" method="post" action=""> | cs |
4) View에서 폼을 통해 입력 받은 이미지를 폼에 두고자 이미지 소스(request.FILES)를 데이터 소스와 같이 둔다.
| if request.method == "POST": form = Form(request.POST, request.FILES) | cs |