Media 파일은 웹사이트 이용자가 올리는 파일이기 때문에 App 차원에서 직접 관리할 필요가 없다.
때문에 STATICFILES_DIR과 다르게 MEDIAFILES_DIRS 설정은 없다.
(1) HttpRequest.FILES를 통해 파일 전달
(2) 뷰 로직이나 폼 로직을 통해 유효성 검증을 수행하고,
(3) FileFiled/ImageField 필드에 "경로(문자열)"를 저장하고,
(4) settings.MEDIA_ROOT 경로에 파일을 저장한다.
◽ MEDIA_URL : 각 media 파일에 대한 URL Prefix. 필드명. url 속성에 의해서 참조되는 설정.
◽ MEDIA_ROOT : 파일필드를 통한 저장 시에, 실제 파일을 저장할 ROOT 경로.
settings.py 아래와 같이 수정
...
BASE_DIR은 base.py의 위치에 따라 결정되기 때문에
운영 서버 또는 개발 머신 어디서나 프로젝트를 구동할 수 있음.
따라서 파일 경로 관련해서는 절대 하드코딩을 하지말자.
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
...
MEDIA_URL = '/media/' # ex) /media/photo1.png
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

“STATICFILES_DIRS는 있는데 왜 MEDIAFILES_DIRS 설정은 없죠?”
Static의 경우 개발하며 직접적으로 관리해주어야 하는 파일이지만,
Media 파일은 웹사이트 이용자가 올리는 파일이기 때문에
App 차원에서 직접 관리할 필요가 없습니다.
PIL(Python Image Library)의 일종, 파이썬으로 이미지들을 처리하고 싶을 때 사용합니다.
파일 올리기 위한 라이브러리 설치
pip install pillow
config\urls.py
from django.conf.urls.static import static
from django.conf import settings
MEDIA_URL로 들어오는 요청에 대해 MEDIA_ROOT 경로를 탐색한다.
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
