[python] Django의 파일 업로드와 다운로드 기능 구현하기
Django 웹 애플리케이션을 개발할 때 파일 업로드 및 다운로드 기능을 구현하는 방법에 대해 알아보겠습니다.
파일 업로드 구현하기
파일 업로드를 구현하는 가장 간단한 방법은 Django의 FileField
를 사용하는 것입니다. 모델에 FileField
를 정의하여 파일을 저장하고, HTML 폼을 통해 파일을 업로드할 수 있습니다.
# models.py
from django.db import models
class Document(models.Model):
description = models.CharField(max_length=255, blank=True)
document = models.FileField(upload_to='documents/')
# forms.py
from django import forms
from .models import Document
class DocumentForm(forms.ModelForm):
class Meta:
model = Document
fields = ('description', 'document')
# views.py
from django.shortcuts import render
from .forms import DocumentForm
def upload_file(request):
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return HttpResponseRedirect('/success/url/')
else:
form = DocumentForm()
return render(request, 'upload.html', {'form': form})
위 코드에서는 Document
모델에 FileField
를 추가하고, DocumentForm
을 통해 파일을 업로드하도록 구현하였습니다.
파일 다운로드 구현하기
파일을 다운로드하는 기능은 간단하게 URL을 통해 구현할 수 있습니다. 파일의 경로를 사용자에게 전달하여 사용자가 직접 파일을 다운로드할 수 있도록 합니다.
# views.py
from django.http import FileResponse
from .models import Document
def download_file(request, document_id):
document = Document.objects.get(pk=document_id)
return FileResponse(open(document.document.path, 'rb'))
위 코드에서는 download_file
함수를 통해 파일을 다운로드할 수 있도록 구현하였습니다.
마치며
Django를 사용하여 파일 업로드와 다운로드 기능을 구현하는 방법에 대해 알아보았습니다. 이를 통해 사용자가 웹 애플리케이션을 통해 파일을 저장하고 다운로드할 수 있는 기능을 구현할 수 있습니다.
참고 문서: https://docs.djangoproject.com/en/3.2/topics/http/file-uploads/