[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/