Front-end : React
Web Server : NginX
Database : PostgreSQL
목표 : flask로 HTTP API 구현
핵심은 DB로부터 데이터를 가져와서 딕셔너리 만들기(by pandas)
선행 목표
Python의 프레임워크이며, 특별한 도구나 라이브러리가 필요 없는 마이크로 웹 프레임워크 이다. 최소한의 구성 요소와 요구 사항을 제공하기 때문에 시작하기 쉽고 유연하게 사용할 수 있다. Werkzeug 툴킷과 Jinja2 템플릿 엔진에 기반을 두고 있다. Werkzeug은 WSGI 유틸리티이며, HTTP 요청을 처리하기 위한 함수(혹은 callable object)로 environ과 start_response를 컨테이너로부터 받아 요청을 처리하는 미들웨어이다.
일반적으로 템플릿과 정적파일은 애플리케이션의 파이썬 소스 디렉토리의 하위 디렉토리에 templates과 statics에 저장된다.
flask_application
|__templates
|__index.html
|__statics
|__upload.png
|_app.py
from flask import Flask #flask 클래스 가져옴
app = Flask(__name__) #flask 클래스의 인스턴스 생성. 이 인스턴스는 WSGI 애플리케이션이 됨
@app.route("/") # route() 데코레이터로 어떤 URL이 함수를 트리거해야 하는지 Flask에 알림
def hello_world():
return "<p>Hello, World!</p>" #사용자의 브라우저에 표시하려는 메시지 반환
if __name__ == '__main__': # python 인터프리터로 직접 실행한다면 현재 동작되는 유일한 서버라는 것을 보장
app.run() # 로컬서버로 실행
파이썬 코드에서 HTML을 생성하는 것은 번거롭다. jinja2는 특정 데이터와 템플릿을 연결해 flask에서 구현이 어려운 동적인 움직임(원래는 이스케이핑을 직접 작성해야함)을 지원하는 템플릿엔진이다. 부모 템플릿으로부터 상속 받아서 사용이 가능하다.
from flask import render_template
@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
return render_template('hello.html', name=name) #템플릿 뿌려주기 위해 render_template() 메소드 사용
<!-- 템플릿 및 상속 예시 -->
<!-- 부모 템플릿(base.html) -->
<html>
<head>
<title>Hi Flask</title>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>
<!-- 자식 템플릿(index.html) -->
{% extends "base.html" %}
{% block content %}
<title>Hello from Flask</title>
{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello World!</h1>
{% endif %}
{% endblock %}