파이썬을 사용하여 웹 애플리케이션을 개발하다보면 파일 업로드 기능이 필요한 경우가 종종 있습니다. 이번 포스트에서는 Python을 사용하여 파일을 업로드하는 방법을 알아보겠습니다.
Flask를 이용한 파일 업로드
Flask는 Python 웹 프레임워크로 유연하고 간편한 웹 애플리케이션 개발을 도와줍니다. Flask에서 파일 업로드 기능을 구현하기 위해서는 다음과 같은 단계를 따라야 합니다.
Flask
모듈을 설치합니다.app.py
파일을 생성하고 아래의 코드를 추가합니다.
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html')
@app.route('/upload', methods=['POST'])
def upload():
file = request.files['file']
file.save('uploads/' + file.filename)
return '파일 업로드가 완료되었습니다.'
if __name__ == '__main__':
app.run(debug=True)
templates
폴더를 생성하고index.html
파일을 생성합니다.
<!DOCTYPE html>
<html>
<head>
<title>파일 업로드</title>
</head>
<body>
<h1>파일 업로드</h1>
<form action="/upload" method="POST" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="업로드">
</form>
</body>
</html>
위의 코드에서는 /
경로로 접속 시 index.html
파일을 렌더링하고, 파일 업로드를 처리하기 위한 /upload
경로가 있습니다. 파일 업로드를 위한 form 태그에서는 enctype="multipart/form-data"
속성을 반드시 추가해야 합니다.
-
uploads
폴더를 생성합니다. 이 폴더는 업로드된 파일이 저장될 위치입니다. -
터미널에서 다음 명령을 실행하여 애플리케이션을 실행합니다.
python app.py
Flask는 기본적으로 5000번 포트를 사용하므로 http://localhost:5000
으로 접속하여 파일 업로드 기능을 테스트할 수 있습니다.
Django를 이용한 파일 업로드
Django 역시 많은 개발자들이 사용하는 Python 웹 프레임워크입니다. Django에서 파일 업로드 기능을 구현하기 위해서는 다음과 같은 단계를 따라야 합니다.
Django
모듈을 설치합니다.-
django_project
폴더를 생성합니다. - 터미널에서 다음 명령을 실행하여 Django 프로젝트를 생성합니다.
django-admin startproject myproject
myproject
폴더로 이동한 후, 다음 명령을 실행하여 앱을 생성합니다.
python manage.py startapp myapp
-
settings.py
파일을 열고INSTALLED_APPS
변수에'myapp'
을 추가합니다. -
myapp
폴더 안에views.py
파일을 생성하고 아래의 코드를 추가합니다.
from django.shortcuts import render
from django.http import HttpResponse
def home(request):
return render(request, 'index.html')
def upload(request):
if request.method == 'POST':
file = request.FILES['file']
with open('uploads/' + file.name, 'wb+') as destination:
for chunk in file.chunks():
destination.write(chunk)
return HttpResponse('파일 업로드가 완료되었습니다.')
myapp
폴더 안에urls.py
파일을 생성하고 아래의 코드를 추가합니다.
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
path('upload', views.upload, name='upload'),
]
templates
폴더를 생성하고index.html
파일을 생성합니다.
<!DOCTYPE html>
<html>
<head>
<title>파일 업로드</title>
</head>
<body>
<h1>파일 업로드</h>
<form action="{% url 'upload' %}" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="file">
<input type="submit" value="업로드">
</form>
</body>
</html>
Django에서는 {% url 'upload' %}
를 이용하여 URL을 생성하고, CSRF(Cross Site Request Forgery) 토큰을 보호하기 위해 {% csrf_token %}
을 사용합니다.
-
uploads
폴더를 생성합니다. 이 폴더는 업로드된 파일이 저장될 위치입니다. -
터미널에서
myproject
폴더로 이동한 후, 다음 명령을 실행하여 개발 서버를 실행합니다.
python manage.py runserver
Django는 기본적으로 8000번 포트를 사용하므로 http://localhost:8000
으로 접속하여 파일 업로드 기능을 테스트할 수 있습니다.
마무리
이번 포스트에서는 Flask와 Django를 사용하여 Python에서 파일 업로드 기능을 구현하는 방법을 알아보았습니다. 파일 업로드는 많은 웹 애플리케이션에서 필수적으로 사용되는 기능이므로, 이러한 기능을 습득하는 것은 개발자로서 중요한 부분입니다. 많은 연습과 테스트를 통해 파일 업로드 기능을 익히시길 바랍니다.
참고자료
- Flask 공식 문서: https://flask.palletsprojects.com/
- Django 공식 문서: https://docs.djangoproject.com/