Flaskアプリ開発用のディレクトリを用意します。
mkdir flaski
cd flaski
以下のソースコードをapp.pyとして保存します。Flask のサイトに載っているものです。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
Note
インデックスルートにアクセスした場合にHello Worldという文字列を返すように設定して(4-6行目)、app.runでサーバーを起動させています。
さぁ、動かしてみましょう、python app.pyと叩けば127.0.0.1:5000でウェブサーバーが起動します。
$ python app.py
* Running on http://127.0.0.1:5000/
ブラウザで localhost にアクセスすると次のように表示されるはずです
単なる文字列を出力するだけではものたりないので、今度はテンプレートエンジンを使い、もう少し複雑なHTMLを表示してみます。Flaskのテンプレートエンジンは Jinja2 ですので、これを使います。
最終的なファイルとディレクトリの構成を表示しておきます。
Flaskアプリの場合にはテンプレートはtemplatesディレクトリ、画像ファイルやjs,cssなどの静的ファイルはstaticディレクトリに配置することになりますので注意してください。
.
├── app.py
├── static
│ └── snake.jpg
└── templates
├── index.html
└── layout.html
まずは snake.jpg をダウンロードしてstaticディレクトリに配置してください。
続いてtemplatesディレクトリにlayout.html,index.htmlの2つのファイルを用意します。
layout.html
<!DOCTYPE html>
<html>
<head>
<title>flaski</title>
</head>
<body>
{% block body %}{% endblock %}
</body>
</html>
index.html
{% extends "layout.html" %}
{% block body %}
<h1>{{title}}</h1>
<img src="{{url_for('static', filename='snake.jpg')}}" alt="snake"/>
{% endblock %}
{{}}で囲むと変数を展開することができます。今回はtitleをapp.pyのrender_templateで渡しています。url_forはエンドポイントを指定するとURLに展開する関数です。urlは極力ハードコードするのを避け、url_forを使うのがいいと思います。
app.pyはrender_templateをインポートしてhello関数で使うようにします。
また今回からデバッグモードで動かすようにapp.configをいじっています(3行目)。
といったことができるので開発時には便利ですが、本番時には必ずfalseにしましょう。
from flask import Flask, render_template
app = Flask(__name__)
app.config['DEBUG'] = True
@app.route("/")
def hello():
return render_template("index.html", title="Flaski")
if __name__ == "__main__":
app.run()
先ほどと同様にhttp://127.0.0.1:5000/にアクセスすると今度は先程とは異なり、HTMLが表示されます。
FlaskでJinja2のテンプレートエンジンを使ってみましたが、 Flaskは何であって何でないか によると
Flask itself just bridges to Werkzeug to implement a proper WSGI application and to Jinja2 to handle templating.
つまり、FlaskはJinjaをテンプレートエンジンにすえたウェブアプリケーションのためのマイクロなフレームワークです。 フルスタックなウェブアプリケーションフレームワークにあるような、モデル操作の ためのORマッパーは用意されていないため、好きなものを利用できます。
次からはORマッパーとしてSQLAlchemyを使っていきます。