Flaskアプリケーション実行の流れ
今日は、『Head First Python』の5章 “Webアプリケーションの構築” で学んだことをアウトプットします。
ブラウザからURLにアクセスすると、サーバから「Hello world from Flask」というメッセージが帰ってくるという簡易なWebアプリケーションを構築してみます。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello() -> str:
return 'Hello world from Flask'
app.run()
1行目は、flaskモジュールからFlaskクラスをインポートします。
Import flaskと書いてflask.FlaskでFlaskクラスを参照することもできますが、flask.Flaskでは読みやすくないので、import文のfromバージョンを使っています。
2行目は、Flask型のオブジェクトを作成して変数appに代入します。
3行目以降がサーバの動作になります。
関数をURLでデコレートする
3行目のコードは、Python構文のデコレータを使っています。関数デコレータは、既存の関数の振る舞いをその関数のコードを変更せずに追加します(つまり、関数がデコレートされます)。
関数デコレータは@記号から始まります。
Flaskのrouteデコレータは、Python関数をデコレートすることでURLパスにマッピングできます。この例では、URL「/」を4行目で定義している関数hello関数にマッピングしています。
routeデコレータは、サーバに「/」のリクエストが届いたときにFlaskサーバがこの関数を呼び出すようにします。
そして、routeデコレータはデコレートされた関数の結果を待ってからその結果をサーバに返します。その後レスポンスをブラウザに返します。
Webアプリケーションを動かす
routeデコレータ行を書いたら、5行目でデコレートされた関数を開始します。このWebアプリケーションではhello関数です。hello関数は「Hello world from Flask!」というメッセージを返します。
最後の行は変数appに代入されたFlaskオブジェクトを取得し、FlaskにWebサーバを起動するように指示するので、runを呼び出します。
この時点で、Flaskは組み込みWebサーバを起動してWebアプリケーションのコードを実行します。URLとして「/」をリクエストされるとサーバは「Hello world from Flask!」というメッセージを返しますが、他のURLがリクエストされると404の「Request not found」エラーが発生します。