FLASK : 파이썬을 사용해 웹 어플리케이션을 작성할 수 있도록 도와주는 프레임워크
특징 : : 웹 어플리케이션 프레임워크, 가장 최소한의 기능들을 모아놓았기 때문에 Django에 비해 가볍다.
pip install flask
flask_app
└── __init__.py
from flask import Flask
app = Flask(__name__)
@app.route('/', methods=['POST', 'GET'])
# /주소로 들어가게되면 return, 기본 메소드가 GET, HEAD, OPTIONS이고 따로 지정하면 다른메소드도 사용가능
def index():
return 'Hello world'
@app.route('/index/', defaults={'test' : 0})
@app.route('/index/<test>') #<>로 변수설정도 가능
def index_test(test):
return f'Welcome to {test} world'
FLASK_APP=flask_app flask run
#export FLASK_APP=flask_app 후에 flask run도 가능
#export FLASK_ENV=development 로 개발자모드 run 가능
기능이 많이질수록 라우트도 많아진다. 라우트들을 하나의 파일로 사용하지 않고 기능별로 나눠서 블루프린트 기능을 사용
flask_app
├── __init__.py
└── routes
└── user_routes.py
# user_routes.py
from flask import Blueprint
bp = Blueprint('user', __name__, url_prefix='/user')
@bp.route('/')
def index():
return 'User index page'
'user' : 블루프린트의 명칭
__name__ : 블루프린트의 import 이름
url_prefix='/user' : URL 접두어 설정 (해당 블루프린트의 라우트는 URL 앞에 '/user' 가 자동으로 붙게 됨)
__init__.py
from flask import Flask
from flask_app.routes import user_routes
app = Flask(__name__)
app.register_blueprint(user_routes.bp)
@app.route('/')
def ~~
여러 개의 어플리케이션을 동시에 사용하거나 app 이 선언되어 있는 파일의 일부분만 필요할 때 유용함. app을 실행시키는 함수를 따로 선언해주는 것.
from flask import Flask
def create_app():
app = Flask(__name__)
from yourapplication.views.admin import admin
from yourapplication.views.frontend import frontend
app.register_blueprint(admin)
app.register_blueprint(frontend)
return app
if __name__ == "__main__":
app = create_app()
app.run()
flask에서는 html파일들을 따로 저장해놓고 웹에 사용되도록 rendering할 수 있다. render_template를 함수를 이용한다.
기본적으로 프로젝트 폴더 내에 'templates' 라는 이름의 폴더를 기본 경로로 설정한다.
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
jinja는 html을 렌더링할때 변수를 사용할 수 있게끔 해준다.
@app.route('/')
def index():
apple = 'red'
apple_count = 10
return render_template('index.html', fruit_color=apple, number=apple_count)
html 파일
<body>
<h2>Apple is {{ fruit_color }}</h2>
<h2>{{ apple_count }} 개의 과일이 있습니다.</h2>
</body>
Jinja 템플릿 상속기능
{% extends %} : 상속받는 파일을 지정
{% block %} ... {% endblock %} : 상속된 파일에서 변경할 수 있는 일종의 HTML '블록' 들을 지정
위의 두 가지를 사용하여 상속
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<div id="content">{% block content %}{% endblock %}</div>
</body>
</html>
{% extends "base.html" %}
{% block content %}
{{ supoer() }} #자식 블록에서 부모블록 가져오기 가능
<h1>Index</h1>
<p class="important">
Welcome to my awesome homepage.
</p>
{% endblock %}