본문 바로가기

개발

[python]파이썬 기반 웹프레임워크 - Django, Flask

최근의 수많은 서비스는 웹을 기반으로 하고 있습니다. 이렇게 웹을 서비스하기 위해서 웹프레임워크를 이용하게 됩니다.

이러한 웹프레임워크에는 Ruby, Java, php 등 여러 언어 기반의 웹프레임워크가 있으며(javascript나 nodejs 기반까지..),
python 기반으로도 역시 웹프레임워크가 있습니다. 대표적인 python 기반의 웹프레임워크는 Django와 Flask , 그리고  FastAPI입니다.

 

▣ Django

Python 기반의 풀스택 프레임워크로, 다양한 기능들이 기본적으로 탑재되어 있다는 것이 가장 큰 장점입니다.
이는 MVT(Model-View-Template)를 기반으로 하는, DB 연결 등 백엔드에서부터 프론트엔드까지 개발에 필요한 거의 모든 기능을
제공하고 있지만, 
이러한 많은 기능에 대한 설정 구성의 복잡함과 유연성 부족, 과도한 용량이 단점이 되기도 합니다. 

 

더보기

1-1) 설치는 pip로 설치가 가능합니다. 

pip install Django

 

 

 

▣ Flask

Python 기반의 마이크로 프레임워크로, 기본적인 기능만 탑재되어 있어 가볍고 빠르며 추가적인 다양한 기능 확장이 가능합니다. 
하지만 필요한 기능이 있을 때마다 직접 구현을 해야 하므로 특히 대규모 서비스 구축은 어려움이 있을 수 있습니다. 

 

더보기

2-1) 설치는 역시 pip로 설치가 가능합니다.

pip install Flask
pip install flask
(그림 2-1) pip를 이용한 Flask 설치 (2024.05.26. 기준 v3.0.3)

 

2-2) 이용

from flask import Flask

# module name (__name__) in Flask constructor
web_app = Flask(__name__)

# route() function = URL path of requests 
@web_app.route('/')
def appWebServer_Flask():
	s_out = '<p>Welcome to Flask Web Server at /(root) directory</p>'
	return s_out
@web_app.route('/hello')
def appWebServer_Hello():
	s_out = '<p>Welcome to Flask Web Server at /hello directory</p>'
	return s_out

if __name__ == '__main__':
	# run() method of Flask class executes the web application. 
    # host = 127.0.0.1 or 0.0.0.0 # allows external access  
	web_app.run(host = '0.0.0.0', port = 8080, debug = True)

 

2-3) 이용

flask --app hello.py run --host=0.0.0.0 --port=8080 --debug

(외부에서 접속을 위해서 hostip는 0.0.0.0으로 합니다. 그리고 웹페이지에서 http://127.0.0.1:8080/ 실행..)

 

2-4) flask와 html 사이 연결

## python
from flask import Flask, render_template, request
flask_template_dir = os.path.abspath('./') # for changing the html dir(default = ./template)

web_app = Flask(__name__, template_folder = flask_template_dir)
@web_app.route('/call', methods = ['GET', 'POST'])
def appWeb_Call():
	o_html = 'called.html' # target html
	s_value_1 = '1'
	s_value_2 = '2'
	return render_template(o_html, value_1 = s_value_1, value_2 = s_value_2)

## html
    <!-- for s_value_1 -->
    <div>{{value_1}}</div>
    <!-- for s_value_2 -->
    <div>{{value_2}}</div>
    
## html - json 데이터 direct로 이용 시 encoding 문제 회피용.. 
<script type="text/javascript">
{% autoescape false %}
var json1 = {"jsonData" : {{value_1}}
	};
var json2 = {"jsonData" : {{value_2}}
	};
{% endautoescape %}
</script>

 

## html
    <!-- form -->
    <div>
    	<form action="post" method="POST"> <!-- action="\post" -->
        	<input type="text" name="in_1" id="in_1"/>
            <input type="submit" value="submit"/>
        </form>
    </div>

## python
from flask import Flask, render_template, request
flask_template_dir = os.path.abspath('./') # for changing the html dir(default = ./template)

web_app = Flask(__name__, template_folder = flask_template_dir)
@web_app.route('/post', methods = ['GET', 'POST'])
def appWeb_Post():
	if request.method == 'POST':
		s_value = str(request.form['in_1'])
		print(s_value)
	return s_value

 

 

 

▣ FastAPI

Python 기반의 빠른 웹프레임워크로, 특히 API 개발에 초점이 맞추어진 프레임워크입니다. 

비동기 처리를 기반으로 매우 빠른 성능에 간결한 코드 작성이 가능하며, WebSocket, GraphQL 등의 기본 지원이 장점이지만,  
역시 필요 기능에 대한 직접 구현이나 외부 라이브러리를 추가하여야 하는 등의 기능 제한이 있습니다. 

3-1) 설치는 역시 pip로 설치할 수 있습니다. 

pip install fastapi

 

 

 

 

참고)

  https://www.djangoproject.com/

    https://docs.djangoproject.com/ko/5.0/ (2024.05. 현재 5.0.6이 release되어 있습니다) 

  https://flask.palletsprojects.com/

  https://fastapi.tiangolo.com/ko/

    https://fastapi.tiangolo.com/tutorial/ 

 

  https://ultahost.com/blog/flask-vs-django/

 

 

반응형