Python 2.7 か Python 3.3 以降を用意します。 pip コマンドも実行できるようにしておいてください。
手順は http://phpy.readthedocs.org/en/latest/install.html を参照してください。
Flask は簡単なWebアプリなら1ファイルで全て実装できます。 (ダウンロード)
1 2 3 4 5 6 7 8 9 10 | import flask
app = flask.Flask(__name__)
@app.route('/')
def index():
return "Hello, World!"
if __name__ == '__main__':
app.run(debug=True)
|
このファイルを python hello.py のように実行すると、 http://127.0.0.1:5000/ で Web サーバーが起動します。 ブラウザでアクセスすると、 Hello, World! の文字が見えるはずです。
import flask という行は、 flask という名前のモジュールを読み込んで、 flask という名前の変数に代入しています。 Python は数値や文字列だけでなく、モジュールやクラスなども全てオブジェクトで、 変数に代入して利用しています。
app = flask.Flask(__name__) という行は、 Flask クラスのインスタンスを作って、 app という変数に代入しています。 オブジェクトの属性にアクセスする場合は、 . という記号を使って、 オブジェクト名.要素名 のようにします。
クラスのインスタンスの場合はメソッドやメンバ変数が属性になりますが、 モジュールの場合はそのモジュールが持っているクラスや関数などが属性になります。 この場合、 flask モジュールが提供している Flask クラスを利用していることになります。
Python でクラスのインスタンス化するときは、単にクラスを関数のように呼び出すだけで、 new などのキーワードや特別な構文はありません。
__name__ というのは、自動的に定義される変数で、現在のファイルのモジュール名が入ります。 ファイルをスクリプトとして直接実行した場合、 __name__ は __main__ になります。
Note
from ... import ... 構文
import flask の代わりに、 from flask import Flask と書くと、 flask.Flask クラスを Flask という変数に代入します。こうすると、 app = flask.Flask(__name__) の代わりに app = Flask(__name__) と書くことができます。
@app.route('/') という行は、 app に対して / というURLに対応するアクションを登録しています。
@ で始まる行はデコレータといって、その次の行で定義する関数やクラスに対して何らかの処理を行います。 @app.route('/') は、次の行で定義される関数を指定した URL にマッピングするという処理を実行しています。
def index(): という行は、関数定義を始めています。 次の行からのコードはインデントが一段深くなり、インデントが元に戻るまでの範囲が関数の中身になります。
return 'Hello, World!' は、 'Hello, World!' という文字列を返しています。 この関数がアクションとして実行されると、自動的にHTTPヘッダなどが付与されてクライアントに返されます。 HTTP ヘッダを自分で制御したい場合は、 flask.make_response() という関数を利用して Response オブジェクトを作り、文字列の代わりに返します。
最後の app.run(debug=True) という行は、 Flask が持っている開発用サーバーを、 デバッグモードで実行しています。 Python は関数の引数に 引数名=値 と書くことで、引数名を指定して引数を渡すことができます。 これをキーワード引数と呼びます。
キーワード引数は、たくさんデフォルト値付きの引数がある関数で、特定のオプションだけを 指定したい場合に便利です。 それ以外にも、引数の順番を間違えるというバグの予防にもなります。 (このバグはコードレビューしてもなかなか見つけられないので、 簡単なわりに原因究明に数時間かかってしまうことがあります)