Django vs Flask
- Python에서 Django와 Flask는 가장 널리 사용되는 오픈소스 기반 웹 프레임워크
- Django는 Python의 full stack web framework인 반면 Flask는 가볍고 확장 가능한 web framework입니다.
- Django는 기능이 훨씬 뛰어나지만 복잡하고
- Flask는 매우 단순하고 가볍습니다.
- Django에서는 탄탄한 framework 안에서 다른 설계 패턴으로 벗어날 수 없다는 점
- Flask에서는 직접 새로운 framework로 설계할 수 있다는 장점이 있지만 이제 막 파이썬 웹 프레임워크에 진입하는 입장에서는 신경써야할게 한두가지가 아니기때문에 최대 단점으로 다가올 수 있습니다.
- Django는 게시판같은 복잡한 구조의 웹을 구성하기에는 좋아보이지만, 단순한 REST API 서버를 만들기에는 군더더기 없는 Flask가 더 효율적
Django
- 구글 앱 엔진에서 django를 사용하게 되면서 많은 사람들이 사용하게 되었으며, web application을 개발하기 위한 대부분의 기능들이 갖추어져 있기 때문에 외부 도구 및 라이브러리를 사용하지 않고도 어느 정도 규모가 있는 web application 개발에도 문제가 없습니다.
- Django는 ORM (Object relational mapping) 기능이 내장되어있습니다.
- ORM은 객체 관계 매핑이라고도 하며 <데이터베이스 시스템>과 <데이터 모델 클래스>를 연결하는 역할
- Django는 자동으로 관리자 화면을 구성해줍니다.
- 데이터베이스에 대한 관리 기능을 위하여 프로젝트를 시작하는 시점에 관리자 화면을 제공합니다.
- 이런 관리자 화면을 이용하여 web application에서 사용하는 데이터들을 쉽게 생성하거나 변경이 가능
Flask
- Flask는 Python의 Micro framework를 기반으로 단순하고 매우 가벼운 web framework
- URL 라우팅, Template, Cookie, Debugger 및 개발서버 등 기본 기능만을 제공
- Flask는 단 10줄도 안되는 코드로 웹 서버를 구동할 수 있습니다.
- 너무나도 간단합니다. from flask import Flask 를 시작으로 서버를 시작하는 코드까지 10줄이 되지 않습니다.
- 물론 그만큼 최소한의 패키지로 구성되어있기때문에 Hello World는 간단히 구현 되지만, 상용 웹 서버를 구현할때는 단순하지만은 않습니다.
- Flask에는 ORM (Object relational mapping) 기능이 제공되지 않습니다.
- 그렇기 때문에, 개발자가 직접 SQLAlchemy 등 개발자에게 편하거나 익숙한 패키지를 설치하여 사용할 수 있습니다.
패키지 설치
> pip install flask
> pip install flask-restx
스샷
app.py : get()함수로 {"hello" : "world!"} 확인하기
from flask import Flask
from flask_restx import Api, Resource
app = Flask(__name__)
api = Api(app)
@api.route('/hello')
class HelloWorld(Resource):
def get(self):
return {"hello": "world!"}
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0', port=80)
- postman에서 확인해보기
app2.py : route의 url에 url pattern 사용해보기
from flask import Flask
from flask_restx import Resource, Api
app = Flask(__name__)
api = Api(app)
@api.route('/hello/<string:name>')
class Hello(Resource):
def get(self, name):
return {"message": "Welcome, %s!" % name}
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0', port=80)
- postman에서 확인해보기
- status code와 Header가 잘 들어가 있음을 확인 가능
app3.py : GET, POST, PUT, DELETE
from flask import Flask, request
from flask_restx import Resource, Api
app = Flask(__name__)
api = Api(app)
todos = {}
count = 1
@api.route('/todos')
class TodoPost(Resource):
def post(self):
global count
global todos
idx = count
count += 1
todos[idx] = request.json.get('data')
return {
'todo_id': idx,
'data': todos[idx]
}
@api.route('/todos/<int:todo_id>')
class TodoSimple(Resource):
def get(self, todo_id):
return {
'todo_id': todo_id,
'data': todos[todo_id]
}
def put(self, todo_id):
todos[todo_id] = request.json.get('data')
return {
'todo_id': todo_id,
'data': todos[todo_id]
}
def delete(self, todo_id):
del todos[todo_id]
return {
"delete": "success"
}
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0', port=80)
- postman에서 확인해보기
- post : json형식으로 parameter 전달
{"data" : "study"}
- get : parameter 없이
http://localhost/todos/[todo_id입력]
형식으로 동작시킴
- put : json형식으로 parameter 전달
{"data" : "studying"}
& url은 http://localhost/todos/[todo_id입력]
형식으로 입력
- delete : parameter 없이
http://localhost/todos/[todo_id입력]
형식으로 동작시킴
References