0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

初めてのFlask

Last updated at Posted at 2020-08-08

##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

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

hello.html
<!-- layout.htmlをテンプレートに拡張する-->
{% extends "layout.html" %}
<!-- block content ~ endblock-の範囲がテンプレートの同宣言範囲に差し込まれる -->
{% block content %}
<h3>Hello</h3>
こんにちは。{{ name }}さん。
{% endblock %}
  • extends で指定したhtmlにこのhtml内のblock contentの内容を反映する。継承のイメージ。

###hello.py

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
結果.png

画面が表示できた。

#####最後に
とりあえず最低限の使い方だけわかったけど、実務でFlask使うことってないだろうし、事業会社はDjangoなんでしょうね。
あくまでも、フレームワークの足がかりとしてなら勉強する価値あるかな。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?