Django는 강력하고 유연한 웹 프레임워크로, 다양한 웹 애플리케이션을 쉽게 개발할 수 있게 해줍니다. 본 강좌에서는 Django를 사용하여 파일 업로드 기능을 구현하는 방법을 자세히 설명하겠습니다. 이를 통해 사용자는 웹 애플리케이션에서 파일을 업로드하고 저장할 수 있는 방법을 배우게 될 것입니다. 이 강좌를 진행한 후, 간단한 파일 업로드 기능을 갖춘 웹 애플리케이션을 구현할 수 있을 것입니다.
1. Django 설치 및 프로젝트 시작하기
먼저 Django를 설치하고 새로운 프로젝트를 시작합니다. 다음 명령어를 사용하여 Django를 설치하세요:
pip install django
설치가 완료되면, Django 프로젝트를 생성합니다:
django-admin startproject myproject
생성된 프로젝트 디렉토리로 이동합니다:
cd myproject
2. 새로운 앱 생성하기
파일 업로드 기능을 구현하기 위해 ‘uploads’라는 새로운 앱을 생성합니다:
python manage.py startapp uploads
그런 다음, 생성한 앱을 프로젝트의 설정 파일인 settings.py
에 추가합니다. 파일의 INSTALLED_APPS
목록에 'uploads'
를 추가합니다:
INSTALLED_APPS = [
...
'uploads',
]
3. 파일 업로드 모델 만들기
다음으로 파일 업로드를 위한 모델을 생성합니다. uploads/models.py
파일을 열고 다음 코드를 추가합니다:
from django.db import models
class Upload(models.Model):
title = models.CharField(max_length=100)
file = models.FileField(upload_to='uploads/')
uploaded_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
이 모델은 파일 업로드를 위한 데이터베이스 구조를 정의합니다. title
필드는 파일의 제목을 저장하고, file
필드는 실제 파일을 저장합니다. uploaded_at
필드는 파일이 업로드된 시간을 자동으로 기록합니다.
4. 데이터베이스 마이그레이션
모델을 작성한 후, 데이터베이스에 반영하기 위해 마이그레이션을 수행합니다. 다음 명령어를 입력하세요:
python manage.py makemigrations uploads
python manage.py migrate
5. 파일 업로드 폼 만들기
이제 파일 업로드를 위한 폼을 생성하겠습니다. uploads/forms.py
파일을 생성하고 아래 코드를 추가합니다:
from django import forms
from .models import Upload
class UploadForm(forms.ModelForm):
class Meta:
model = Upload
fields = ['title', 'file']
이 폼은 사용자로부터 파일 이름과 파일을 입력받기 위한 것입니다.
6. 뷰 및 URL 설정
다음으로 사용자가 파일을 업로드할 수 있도록 뷰를 설정해야 합니다. uploads/views.py
파일을 열고 아래 코드를 추가합니다:
from django.shortcuts import render, redirect
from .forms import UploadForm
def upload_file(request):
if request.method == 'POST':
form = UploadForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('upload_file')
else:
form = UploadForm()
return render(request, 'uploads/upload.html', {'form': form})
여기서는 POST 요청이 있을 경우 폼을 검증하고, 유효할 경우 파일을 저장합니다. 사용자가 파일 업로드 페이지로 돌아갈 수 있도록 리디렉션합니다.
7. URL 설정
뷰 함수에 대한 URL을 설정하려면 uploads/urls.py
파일을 생성하고 아래 코드를 추가합니다:
from django.urls import path
from .views import upload_file
urlpatterns = [
path('', upload_file, name='upload_file'),
]
이제 프로젝트의 기본 URL과 연결하기 위해 myproject/urls.py
파일을 수정합니다:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('uploads/', include('uploads.urls')),
]
8. 템플릿 만들기
사용자에게 파일 업로드 폼을 보여주기 위해 템플릿을 생성합니다. uploads/templates/uploads/upload.html
파일을 생성하고 아래 코드를 추가합니다:
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>파일 업로드</title>
</head>
<body>
<h1>파일 업로드</h1>
<form method="post" enctype="multipart/form-data">
<{% csrf_token %}>
<div>
<label for="title">파일 제목:</label>
<input type="text" name="title" required>
</div>
<div>
<label for="file">파일 선택:</label>
<input type="file" name="file" required>
</div>
<button type="submit">업로드</button>
</form>
</body>
</html>
위의 HTML 템플릿은 사용자가 파일 제목과 파일을 선택해 업로드할 수 있는 폼을 제공합니다.
9. 정적 파일 및 미디어 파일 설정
미디어 파일 업로드를 위해 Django 설정 파일인 settings.py
를 수정해야 합니다. 다음 항목을 추가하세요:
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'
또한, 프로젝트 URL 설정 파일인 myproject/urls.py
에 미디어 파일을 제공하기 위한 코드를 추가합니다:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('uploads/', include('uploads.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
10. 서버 실행 및 테스트
모든 설정이 완료되었으니, 이제 서버를 실행해보겠습니다. 다음 명령어로 서버를 실행합니다:
python manage.py runserver
이제 웹 브라우저에서 http://127.0.0.1:8000/uploads/
주소로 접속하면 파일 업로드 폼이 나타납니다. 파일을 선택하고 제목을 입력한 후 ‘업로드’ 버튼을 클릭하면 파일이 서버에 성공적으로 업로드됩니다.
11. 업로드된 파일 관리
업로드된 파일을 관리할 수 있는 방법도 필요한데, 간단하게 업로드된 파일 목록을 보여주는 페이지를 추가해보겠습니다. uploads/views.py
에 업로드된 파일 목록을 볼 수 있는 뷰를 추가합니다:
from .models import Upload
def file_list(request):
files = Upload.objects.all()
return render(request, 'uploads/file_list.html', {'files': files})
그리고 URL을 설정하여 파일 목록을 볼 수 있도록 합니다. uploads/urls.py
에 다음 코드를 추가합니다:
urlpatterns = [
path('', upload_file, name='upload_file'),
path('files/', file_list, name='file_list'),
]
마지막으로, 파일 목록을 보여줄 템플릿을 생성합니다. uploads/templates/uploads/file_list.html
파일을 만들고 다음 코드를 추가합니다:
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>업로드된 파일 목록</title>
</head>
<body>
<h1>업로드된 파일 목록</h1>
<ul>
<{% for file in files %}>
<li><a href="{{ file.file.url }}">{{ file.title }}</a></li>
<{% endfor %}>
</ul>
<a href="{% url 'upload_file' %}">파일 업로드 페이지로 이동</a>
</body>
</html>
12. 결론
이번 강좌에서는 Django를 사용하여 간단한 파일 업로드 기능을 구현하는 과정을 살펴보았습니다. 파일 업로드 모델, 폼, 뷰, 템플릿, URL 설정 등 다양한 요소를 통해 최종적으로 사용자가 파일을 웹 애플리케이션에 업로드하고 확인할 수 있는 기능을 구축하게 되었습니다.
Django는 강력한 기능을 제공하며, 파일 업로드 외에도 다양한 기능을 쉽게 확장할 수 있습니다. 앞으로 이 강좌에서 배운 내용을 바탕으로 더 복잡한 애플리케이션으로 발전시켜보시길 바랍니다.
감사합니다!