Django 17. 유저가 파일 업로드
Django 17. 유저가 파일 업로드
1. 경로 설정
유저가 업로드 하는 파일의 경로는 /media/ 를 사용
루트 디렉토리 안에 media 디렉토리 사용
settings.py에 STATIC_URL 아래쪽에 코드 추가
MEDIA_URL : 유저가 업로드하는 파일들을 루트 -> media 디렉토리에 업로드 되도록 설정
MEDIA_ROOT : 유저가 처음 업로드할 때 Django가 자동으로 해당 디렉토리를 생성
2. 파일 저장 필드 설정
models.py 파일에서 테이블 클래스를 정의할 때 models.ImageField() 를 이용해서 이미지 파일 컬럼 생성
* 예시
upload_to : 이미지를 저장할 경로. root -> media -> 디렉토리 명 작성. 자동으로 디렉터리가 생성됨
blank : 해당 컬럼을 비워둘 지 여부 (True면 비워둘 수 있음)
Django에서 이미지 파일을 다루기 위한 이미지 처리 라이브러리 'Pillow' 설치
pip3 install Pillow
터미널에 아래 명령어를 입력해서 결과를 DB에 반영
python3 manage.py makemigrations
python3 manage.py migrate
3. 어드민 페이지에서 확인
admin 페이지 설정을 하면 어드민 페이지에서 테이블에 이미지를 업로드할 수 있음
admin 페이지 설정
https://kumioriscodingdiary.blogspot.com/2023/07/django-11-admin.html
* 업로드한 파일 불러오기
이미지 url을 클릭하면 404 에러가 발생
MEDIA_URL을 이용해서 유저가 업로드한 파일을 불러오려면 추가 설정 필요
해당 앱의 urls.py 파일에 코드 추가
urlpatterns 배열이 정의된 곳에 아래 코드 추가
prefix : URL의 접두어가 MEDIA_URL일 때 정적 파일을 반환
document_root : 정적파일을 불러올 경로 지정
=> 어드민 페이지에서 이미지 링크를 다시 클릭하면 해당 이미지를 화면에 띄워줌
4. 템플릿 파일에 업로드된 파일 표시
템플릿 파일로 전달한 객체의 ImageField 컬럼의 (ImageField 객체) 다양한 속성(맴버 변수)으로 값을 받아올 수 있음
[모델 인스턴스 객체].[이미지 파일 컬럼].[속성 이름]
.name : MEDIA_ROOT 디렉토리를 기준으로 한 경로 (media 디렉토리 이후의 경로)
.path : 시스템 전체 기준 경로
.size : 저장된 파일의 bytes 수
.url : MEDIA_URL을 기준으로 이미지의 접근 url
=> 템플릿에서는 url 속성을 이용해서 화면에 표시
<img> 태그의 src 속성에 불러올 파일의 url 속성 지정
이미지가 없는 경우도 고려해서 {% if %}를 이용해서 처리
* 예시
5. 파일 올리는 폼 작성
cbv(class base view) 에서는 forms.py 파일에 이미지 파일 컬럼을 fields와 labels 에 추가만 하면 자동으로 처리됨
템플릿 파일의 <form> 태그의 enctype(엔코더 타입)을 "multipart/form-data"로 지정
* 예시
파일 선택 버튼을 클릭해서 업로드할 파일을 선택하면 해당 파일을 업로드함





댓글
댓글 쓰기