Python/Django

Django에서 파일 업로드 처리 (ImageField, FileField)

임베디드 친구 2025. 11. 5. 19:42
반응형

Django에서 파일 업로드 처리 (ImageField, FileField)

Django에서 파일을 업로드하는 기능은 FileFieldImageField를 사용하여 간단하게 구현할 수 있습니다. 이 글에서는 Django의 파일 업로드 기능을 활용하는 방법을 단계별로 설명하겠습니다.

1. Django 프로젝트 및 앱 생성

파일 업로드 기능을 구현하기 위해 Django 프로젝트와 앱을 생성합니다.

mkdir django_file_upload
cd django_file_upload
python -m venv venv
source venv/bin/activate  # Windows에서는 venv\Scripts\activate
pip install django

django-admin startproject myproject
cd myproject
django-admin startapp myapp

Django 프로젝트와 앱을 생성한 후, myapp을 프로젝트의 INSTALLED_APPS에 추가합니다.

# myproject/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',
]

2. 모델(Model) 정의

Django에서 파일을 저장하려면 모델에서 FileField 또는 ImageField를 정의해야 합니다.

# myapp/models.py
from django.db import models

class Document(models.Model):
    title = models.CharField(max_length=255)
    file = models.FileField(upload_to='uploads/')

class Image(models.Model):
    title = models.CharField(max_length=255)
    image = models.ImageField(upload_to='images/')
  • upload_to 옵션은 업로드된 파일이 저장될 경로를 지정합니다.
  • FileField는 모든 유형의 파일을 저장할 수 있습니다.
  • ImageField는 이미지 파일만 업로드할 수 있으며, Pillow 라이브러리가 필요합니다.
pip install pillow

마이그레이션을 생성하고 적용합니다.

python manage.py makemigrations myapp
python manage.py migrate

3. 폼(Form) 생성

Django의 forms.ModelForm을 사용하여 파일 업로드 폼을 생성합니다.

# myapp/forms.py
from django import forms
from .models import Document, Image

class DocumentForm(forms.ModelForm):
    class Meta:
        model = Document
        fields = ('title', 'file')

class ImageForm(forms.ModelForm):
    class Meta:
        model = Image
        fields = ('title', 'image')

4. 뷰(View) 및 템플릿 작성

뷰(View) 구현

views.py에서 파일 업로드를 처리하는 뷰를 작성합니다.

# myapp/views.py
from django.shortcuts import render, redirect
from .forms import DocumentForm, ImageForm
from .models import Document, Image

def upload_file(request):
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('upload_success')
    else:
        form = DocumentForm()
    return render(request, 'upload_file.html', {'form': form})

def upload_image(request):
    if request.method == 'POST':
        form = ImageForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('upload_success')
    else:
        form = ImageForm()
    return render(request, 'upload_image.html', {'form': form})

def upload_success(request):
    return render(request, 'upload_success.html')

URL 설정

urls.py에 URL 패턴을 추가합니다.

# myapp/urls.py
from django.urls import path
from .views import upload_file, upload_image, upload_success

urlpatterns = [
    path('upload/file/', upload_file, name='upload_file'),
    path('upload/image/', upload_image, name='upload_image'),
    path('upload/success/', upload_success, name='upload_success'),
]

템플릿 작성

upload_file.html

<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">파일 업로드</button>
</form>

upload_image.html

<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">이미지 업로드</button>
</form>

upload_success.html

<p>파일이 성공적으로 업로드되었습니다!</p>
<a href="/upload/file/">다시 업로드</a>

5. 미디어 파일 설정

파일이 실제로 저장될 위치를 설정해야 합니다. settings.py에서 미디어 파일 설정을 추가합니다.

# myproject/settings.py
import os

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

또한 urls.py에서 미디어 파일을 서빙할 수 있도록 설정해야 합니다.

# myproject/urls.py
from django.conf import settings
from django.conf.urls.static import static

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

6. Django 개발 서버 실행 및 테스트

python manage.py runserver

웹 브라우저에서 http://127.0.0.1:8000/upload/file/ 또는 http://127.0.0.1:8000/upload/image/로 이동하여 파일 업로드 기능을 테스트할 수 있습니다.

7. 결론

이 글에서는 Django에서 FileFieldImageField를 사용하여 파일 업로드를 처리하는 방법을 설명하였습니다. Django의 강력한 폼과 모델 기능을 활용하여 쉽고 효율적으로 파일 업로드 기능을 구현할 수 있습니다.

반응형