이제 모델을 활용해서 이미지를 업로드하고, 페이지에 띄워봅시다. 먼저 사용자가 이미지를 업로드 하면 이미지가 저장될 장소부터 만들어 봅시다. 앞서 Django는 static파일을 **개발자가 준비하는 파일(static)**과 이용자들이 올리는 파일(media) 두가지로 구분한다고 했었습니다.

settings.py에 media 설정하기

이전 시간에 작성했던 STATIC_ROOT와 STATIC_URL 그대로 복사 붙여넣기 합니다.

그리고 static을 전부 media로 바꿔줍니다.

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# Django 3.1 이상부터는
# MEDIA_ROOT = Path(BASE_DIR, 'media')
MEDIA_URL = '/media/'

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/9d577dbe-0061-41cc-ab60-b5bfe0f84da3/Untitled.png

ulrs.py에 media 설정하기

from django.conf import settings
from django.conf.urls.static import static

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)  

urls.py의 내용을 위와 같이 추가합니다. settingsstatic 관련 내용을 import하고 맨 마지막에 static 관련한 한줄을 추가해줍니다. 그냥 이렇게 해야 올린 이미지를 읽어올수 있구나 생각하면 됩니다.

models.py 작성하기

그럼 이제 사용자가 올린 파일을 저장할 DB를 작성해봅시다.

class Photo(models.Model):
    title = models.CharField(max_length=255)
    image = models.ImageField(upload_to='images/')
    description = models.CharField(max_length=500)

    def __str__(self):
        return self.title

앞서 만들었던 model과 다른 점이 있다면 이미지를 업로드 한다는 점입니다.

그래서 image를 살펴보면 **upload_to='images/'**라는 내용이 있는데 이부분이 업로드된 이미지들을 images 폴더안에 넣으라는 의미입니다.4

위와 같이 모델 구성이 끝났으면 migration을 할 차례입니다.

python manage.py makemigrations
python manage.py migrate

경고창이 뜨면서 Pillow가 설치안됬다고 메세지가 나오면, 그것도 설치해 줍니다.