💡 AI 인사이트

🤖 AI가 여기에 결과를 출력합니다...

댓글 커뮤니티

쿠팡이벤트

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

검색

    로딩 중이에요... 🐣

    [코담] 웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트

    3. 파일 이미지필드 | ✅ 저자: 이유정(박사)

    설명:

    • ImageField: 이미지 업로드를 위한 필드입니다.
    • FileField: 이미지 외 일반 파일 업로드용 필드입니다.
    • upload_to='...': 업로드된 파일이 저장될 경로 (폴더 구조)를 지정합니다.
    • blank=True, null=True: 필수 입력이 아님을 의미합니다.

    예:

    • 사용자가 글을 쓸 때 이미지와 파일을 첨부할 수 있게 됩니다.
    • 이미지 파일은 posts/images/ 폴더에,
    • 일반 파일은 posts/files/ 폴더에 저장됩니다.

    • ImageField는 이미지를 업로드하고 처리하기 위해 Python 이미지 처리 라이브러리인 Pillow가 필요합니다.
    • pip install Pillow를 반드시 해야 오류 없이 이미지 업로드가 가능합니다.

    settings.py에 MEDIA 설정

    • MEDIA_URL: 브라우저에서 파일을 접근할 때 사용할 URL 경로입니다.
    • MEDIA_ROOT: 실제 파일이 저장될 서버의 경로입니다. (/media 폴더로 생성됨)
    • 사용자가 업로드한 이미지가 media/posts/images/파일.jpg에 저장되고,
    • 웹에서는 http://도메인/media/posts/images/파일.jpg로 접근 가능해집니다.

    urls.py MEDIA 경로 등록

    • 개발 서버에서 업로드된 파일을 브라우저에 보여주기 위해 필요한 설정입니다.
    • static() 함수를 통해 /media/로 접근하면 실제 파일 경로(MEDIA_ROOT)에서 찾아줍니다.

    모델에 추가한 image, file 필드도 fields에 포함시켜야 폼에서 사용자가 업로드할 수 있습니다.

    • request.POST는 사용자가 <form>에서 입력한 텍스트 데이터 (예: 제목, 내용 등)를 담고 있습니다.
    request.POST = {
        'title': '오늘의 일기',
        'content': '오늘은 정말 덥다.'
    }
    
    • request.FILES<input type="file">을 통해 업로드된 파일 데이터 (이미지, 문서 등)를 담고 있습니다.
    request.FILES = {
        'image': <InMemoryUploadedFile: photo.jpg>,
        'file': <InMemoryUploadedFile: sample.pdf>
    }
    

    즉, 사용자가 첨부한 이미지/파일은 request.POST에 들어가지 않습니다. 그래서 폼에서 파일을 받으려면?

    form = PostForm(request.POST, request.FILES)
    
    • request.POST : 글 제목, 내용 등 텍스트 필드용
    • request.FILES : 이미지, 파일 등 파일 필드용

    이렇게 둘 다 함께 넘겨야, Django의 ModelForm이 내부적으로 각 필드에 알맞은 데이터를 넣고 유효성 검사를 할 수 있습니다.

    이미지 보여주기

    {% if post.image %}
      <img src="{{ post.image.url }}" alt="{{ post.title }}">
    {% endif %}
    

    사용자가 업로드한 이미지를 웹페이지에 바로 보여주는 기능입니다. 결과예시:

    <img src="/media/posts/images/cat.jpg" alt="귀여운 고양이">
    

    파일 다운로드 링크 만들기

    {% if post.file %}
      <a href="{{ post.file.url }}">파일 다운로드</a>
    {% endif %}
    

    예시결과

    <a href="/media/posts/files/lecture.pdf">파일 다운로드</a>
    

    사용자가 업로드한 PDF, Word, ZIP 등의 파일을 링크로 제공하고 다운로드할 수 있게 해줍니다.

    TOP
    preload preload