FileField 사용법
채팅 프로젝트를 만들면서 메시지에 포함된 이미지나 다른 파일을 서버에 저장해야 하는 상황이 발생했다.
파일 업로드와 관련된 처리를 도와주는 Django 모델 필드로 FileField와 ImageField를 사용하여 파일을 관리하려고 한다.
사용방법
serrings.py 설정
#settings.py
...
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
...
settings.py에 media파일 경로를 설정해 준다.
- MEDIA_URL: 업로드된 파일에 접근할 수 있는 URL 경로
- MEDIA_ROOT: 실제 파일이 서버에 저장되는 위치
파일을 저장하면 manage.py와 같은 경로에 media파일이 자동으로 생성된다.
모델에서 FileField 사용
#models.py
...
file = models.FileField()
FileField는 기본 model에서 사용하는 방식으로 사용하며 몇 가지 옵션이 존재 한다.
upload_to =
파일이 업로드될 경로를 지정한다. 폴더가 없으면 자동으로 생성됩니다.
예) upload_to ="chat_image"라고 지정하면 media/chat_image에 저장이 된다.
null =
null 값 설정이 가능하다. 기본 옵션은 False 값인데 True로 설정이 가능하다.
blank =
해당 필드를 빈 값으로 제출할 수 있게 허용합니다.
storage =
파일의 저장 방식을 변경하는 옵션으로 클라우드 스토리지나 다른 저장소를 사용하기 위해 설정한다.
AWS S3를 사용할 때는 django-storages 패키지와 같이 사용한다.
ImageField와 차이점
ImageField는 이미지 전용 필드로, 파일이 이미지 형식인지 검증하고, 이미지 크기와 관련된 추가 기능을 제공합니다.
이미지 파일 말고 다양한 파일 유형을 다룬다면 FileField를 사용하는 것이 좋다.
결론
FileField와 ImageField는 파일 업로드와 저장을 위한 Django 모델 필드로, 상황에 맞는 필드를 선택해 사용하면 된다. 이미지 파일을 다룬다면 ImageField가 적합하고, 다양한 파일을 다뤄야 한다면 FileField를 사용하는 것이 좋다. 나중에 AWS S3와 연동하여 클라우드 저장소에 파일을 저장하는 방법도 적용해야겠다.
참고문헌