##Flaskモジュールのインストール
(base) root@e8cf64ce12e9:/home/continuumio#pip install flask
##フォルダ構造の作成
Flaskで使用するHtmlファイルは、プロジェクトフォルダに「templates」という名称のフォルダを作成して格納する必要がある。
注:テンプレートという名前だけど、要はFlaskで利用するHtmlファイルはすべてここに格納すれば良い。
.
├── __pycache__
├── hello.py
└── templates
├── hello.html
└── layout.html
余談:上記のようなディレクトリ構造を取得するためには、「tree」コマンドを別途インストールする必要がある。
Docker環境がUbuntuだったので「apt install tree」でインストールできた。Macローカルの場合のインストールは別途作業が必要みたい。
各ファイルの役割は下記の通り
-
hello.py: アプリケーションのルーティングファイル。
<2020/08/09 追記>
ルーティングファイルは常にこの位置にないとだめみたい。
別フォルダに格納してルーティングするテンプレートのパスを調整してみたけどだめだった。フレームワーク内で決まってるのかもしれない。 -
template/hello.html: 画面の一部を構成するhtmlファイル。とどのつまり画面を構成するパーツ。
-
templates/layout.html: すべてのHtmlファイルのベースとしてのhtmlファイル。このファイルの部分部分にhello.htmlのようなパーツとしてのhtmlフィアルが組み込まれてくイメージ。
##各ファイルの内容
###layout.html
<!DOCTYPE html>
<html>
<head>
<titile>{{ title }}</titile>
</head>
<body>
{% block content %}
<!-- main-->
{% endblock %}
</body>
</html>
- {{ val }}: val部分には同名の変数の値が反映される。
- {% block content%}~{% endblock %}:このタグ範囲に拡張パーツとしてのhtmlファイルに記載されている{% block content%}~{% endblock %}のスクリプトが差し込まれるイメージ
###hello.html
<!-- layout.htmlをテンプレートに拡張する-->
{% extends "layout.html" %}
<!-- block content ~ endblock-の範囲がテンプレートの同宣言範囲に差し込まれる -->
{% block content %}
<h3>Hello</h3>
こんにちは。{{ name }}さん。
{% endblock %}
- extends で指定したhtmlにこのhtml内のblock contentの内容を反映する。継承のイメージ。
###hello.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def hello():
name = 'TEST'
# return name
return render_template('hello.html', tite="flask test", name=name)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000, debug=True)
- 「render_template」をimportすることでJinja2テンプレートの機能が利用できるようになる。
- render_template([呼び出すhtml],[[テンプレートに渡す変数名=値],...]
- 「if name == "main":」 コマンドラインからpythonファイルを実行する際のおまじないという認識でOK。
- app_run([host=0,0,0,0],[port=XXXX],[debug=XXXX])でアプリケーションを起動する。
hostとかポートはここで指定しなくても動かす方法がありそうだが、おいおい調査する。
##実行
(base) root@e8cf64ce12e9:/home/continuumio# python hello.py
* Serving Flask app "hello" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
* Restarting with inotify reloader
* Debugger is active!
* Debugger PIN: 197-268-519
画面が表示できた。
#####最後に
とりあえず最低限の使い方だけわかったけど、実務でFlask使うことってないだろうし、事業会社はDjangoなんでしょうね。
あくまでも、フレームワークの足がかりとしてなら勉強する価値あるかな。