[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🛠 기타/WEB

django 기초 - model에서 이미지 사용하기

inu 2020. 9. 14. 12:15
반응형

이미지 사용하기

  • 사용자로부터 이미지를 받고 이를 처리하기 위해선 별도의 처리가 필요하다.

settings.py

  • settings.py에 이미지의 경로를 설정하는 코드를 추가한다.
  • 우리는 이미지를 루트디렉토리의 media 폴더에 넣어줄 것이다.
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
  • MEDIA_ROOT : 이미지가 저장될 경로
  • MEDIA_URL : 이미지가 사용될 때 표현될 URL

models.py

  • 우리가 사용할 model class에 이미지 필드를 추가해준다.
image = models.ImageField(upload_to='appname', null=True)
  • 이렇게하면 사용자가 모델에 입력한 이미지파일은 'appname/이미지파일명'으로 저장된다. appname은 표기해두었듯이 현재 사용중인 app의 이름으로 설정하는 것이 관리하기 용이하다.

Pillow 라이브러리

  • 이미지 필드는 내부적으로 Pillow라는 라이브러리를 사용하기 때문에 설치해야 한다.
pip install Pillow

templates (html from)

  • 사용자가 이미지를 저장할 수 있는 페이지를 작성한다.
<form action="{% url '목표 url' %}" method="POST" enctype="multipart/formdata">
    <input type="file" name='image'>
</form>
  • enctype을 'multipart/formdata'로 설정해야 정상적으로 담긴다.
  • 이미지를 받을 수 있도록 input의 type은 'file'로 설정한다.

views.py

  • views.py의 메소드에서 해당 파일을 받아와야 한다.
if 'image' in request.FILES:
    image = request.FILES['image']
  • 이미지 파일은 별도로 FILES에 작성되기 때문에 해당 위치를 통해 접근한다.
  • 보통 if문과 함께 받아온다.

templates (html to)

  • 그렇게 담긴 image 오브젝트는 바로 접근할 수 없고, 'image.url'로 접근해야 정상적으로 접근된다.
  • 따라서 {% image.url %}과 같은 형식으로 받아와야 한다. (물론 데이터 전달방법에 따라 조금씩 바뀔 수는 있다.)
  • url 외에도 다른 옵션이 있지만, 일단 이미지를 출력하도록 하는 것은 image.url이다.
반응형