● 포스트에 이미지 올리기
이미지 폴더 지정
Django는 이미지 업로드를 위한 ImageField를 제공해준다. 이를 이용하기 위해서는 어디에 저장할지, 업로드된 이미지 폴더의 URL을 어떻게 할지 settings.py파일에 설정해야 한다.
이미지 파일을 프로젝트 폴더 아래 '_media' 라는 이름의 하위 폴더를 만들고 저장하도록 설정하였다. 또한 MEDIA_URL 은 /media/ 로 지정하였다. 즉 도메인이나 ip 뒤에 /media/ 경로가 붙으면 미디어 파일을 사용하겠다는 의미이다.
blog/models.py 파일을 수정한다.
upload_to에 이미지를 저장할 폴더 경로를 설정한다. 경로상 blog 폴더의 하위폴더로 images폴더와 그 하위 폴더로 년/월/일 까지 내려간 위치에 이미지를 저장하도록 설정한다. 이는 웹 사이트 방문시 서버에서 파일을 찾아오는 시간을 단축하기 위함이다. 한 폴더에 파일이 많으면 찾는 시간이 길어지는데 여러 폴더에 파일을 넣어 분산시키면 시간을 절약할 수 있는 모양이다. 즉 폴더가 많은가 유무는 속도에 별 영향을 미치지 않는다는 뜻이다.
blank = True 는 title 이나 content 필드를 채우지 않더라도 경고 메세지 없이 저장하도록 하는 옵션이다.
Pillow 라이브러리 설치 후 migration
위의 이미지 처리를 위해서는 Pillow라는 라이브러리를 설치해야 한다. Pillow는 ImageField를 사용할 수 있게 해준다.
이미지 업로드 테스트
터미널에서 서버를 실행시킨 후 포스트 수정으로 이미지를 추가하면 이전에 설정한 이미지 폴더 경로가 생성된다.
이미지 파일의 링크를 클릭하면 위와같이 404오류가 뜨는데 경로가 분명히 올바르게 설정 되었음에도 not found가 뜬다. 이것은 미디어 파일과 관련된 URL을 아직 따로 설정하지 않았기 때문에 발생하는 오류이다.
미디어 파일을 위한 URL 지정
아직 django_blog_project/urls.py에서 media URL에 대한 설정을 하지 않았기 때문에 오류가 발생하였다. URL 지정을 위한 코드를 입력한다. static 폴더와 settings.py 파일 이용을 위해 각각 from django.conf import settings 와 from django.conf.urls.static import static 을 입력한다.
포스트 목록 페이지에서 대표 이미지로 보이도록 post_list.html 파일을 수정한다.
정상적으로 출력된 것을 확인후 테스트 용도로 만든 _media 폴더를 버전 관리에서 제외하도록 한다.
● 포스트에 파일 올리기
file_upload 필드 만들기
이미지 뿐만 아니라 파일도 첨부하는 기능을 구현하기 위해 장고에서 제공하는 FileField를 사용한다. 이전에 작성한 ImageField와 유사하다. 입력 후 migration을 하여 DB에 변동사항을 적용한다.
파일 업로드 테스트
관리자 페이지에서 포스트에 파일을 추가하면 위와 같이 폴더와 파일이 정상적으로 생성되었음을 볼 수 있다.
'Backend > Django + Bootstrap 개발 일지' 카테고리의 다른 글
13. 테스트 주도 개발(TDD)을 이용한 블로그 기능 구현 목차 개요 (0) | 2022.07.23 |
---|---|
12. 템플릿 파일에서 if문 사용, 다운로드 버튼 만들기, 템플릿 필터 사용 (0) | 2022.07.19 |
10. 정적 파일 관리 (0) | 2022.07.14 |
9. CBV로 페이지 제작 (0) | 2022.07.12 |
8. URL설정, FBV 페이지 만들기 (0) | 2022.07.12 |