今さらPython3 (64) - Flask

第9章続行中。

入門 Python 3

入門 Python 3

Flask

Bottleよりももう少し気が利いているというFlaskを試す。まずはインストール。

$ pip3 install flask
Collecting flask
  Downloading Flask-0.10.1.tar.gz (544kB)
    100% |████████████████████████████████| 544kB 853kB/s 
Collecting Werkzeug>=0.7 (from flask)
  Downloading Werkzeug-0.11.3-py2.py3-none-any.whl (305kB)
    100% |████████████████████████████████| 307kB 1.4MB/s 
Collecting Jinja2>=2.4 (from flask)
  Downloading Jinja2-2.8-py2.py3-none-any.whl (263kB)
    100% |████████████████████████████████| 266kB 2.6MB/s 
Collecting itsdangerous>=0.21 (from flask)
  Downloading itsdangerous-0.24.tar.gz (46kB)
    100% |████████████████████████████████| 49kB 7.3MB/s 
Collecting MarkupSafe (from Jinja2>=2.4->flask)
  Downloading MarkupSafe-0.23.tar.gz
Installing collected packages: Werkzeug, MarkupSafe, Jinja2, itsdangerous, flask
  Running setup.py install for MarkupSafe
  Running setup.py install for itsdangerous
  Running setup.py install for flask
Successfully installed Jinja2-2.8 MarkupSafe-0.23 Werkzeug-0.11.3 flask-0.10.1 itsdangerous-0.24

flask1.pyというファイルを作り、

サーバーを実行する。

$ python3 flask1.py

http://localhost:9999/にアクセスする。さっき作ったindex.htmlが表示される。

f:id:deutschina:20151225220433p:plain

http://localhost:9999/echo/Mothraにアクセス。ソースを見る限り、入れた名前がそのまま表示されるはず。

f:id:deutschina:20151225220439p:plain

エラーになると、こんな感じでダンプを吐くんですね。

f:id:deutschina:20151225215922p:plain

flask + jinja2

ここからは、テンプレートシステムjinja2とflaskの併用を試す。

$ mkdir templates

サブディレクトリtemplateを作る。そのtemplateの下にflask2.htmlを作ってから、

flask2.pyを作成して、サーバーを実行。

$ python3 flask2.py

http://localhost:9999/Mothraにアクセス。

f:id:deutschina:20151225222210p:plain

flask2.htmlの{{ thing }}というところに名前がインサートされて表示された。

さらに、テンプレートを書き換える。flask3.htmlをtemplateの下に作成する。もう1つ{{ place }}という何かが追加されてますね。

flask3a.pyのロジックを見ると、/echo/の後ろにthingとplaceをそれぞれ/に続けてというのがURLのルールになる訳だね。http://localhost:9999/Rodan/McKeesportにアクセスすると、こんな画面になる。

f:id:deutschina:20151225224253p:plain

パラメータ渡しの方法として、上のヤツだとあんまり「それっぽい感」がないよね。ということで、もう少しいじったのが下のコード(flask3b.py)になる訳ですね。

http://localhost:9999/echo?thing=Gorgo&place=Wilmerdingにアクセスするとさっきと同じ結果が得られますと。よくURLのうしろに?が付いてパラメータ値的なものを渡しているのを見かけるけど、これと同じ仕組みって事だね。

これは、flask3b.pyと同じパターンだけど、**kwargsを使ってもう少しPythonっぽい感じになるね。

(つづく)