====================== 2. Flaskチュートリアル ====================== Flask公式チュートリアルのFlaskrというブログアプリを作っていきます。 公式のチュートリアルではsqliteを直接使っていますが、 今回はSQLAlchemyを使っていきます。 Step 0 ====== まずはディレクトリを作成します。 最終的なディレクトリとファイルは以下の様な構成となります。:: manage.py requirements.txt flaskr/ |- __init__.py |- config.py |- views.py |- models.py |- static/ |- style.css |- templates/ |- layout.html |- show_entries.html 以下の様な感じで作成します。:: cd 先ほどhelloworldディレクトリを作成したディレクトリ mkdir -p tutorial/flaskr/{static,templates} cd tutorial touch manage.py requirements.txt touch flaskr/{__init__,views,models,config}.py touch flaskr/static/style.css touch flaskr/templates/{layout,show_entries}.html requirements.txt ---------------- このブログアプリに必要なライブラリを記述します。 .. literalinclude:: ../samples/02/requirements.txt ここに記述したライブラリは、:: pip install -r requirements.txt を実行することでインストールすることができます。 記述したら実際に実行してみて下さい。 manage.py --------- flaskrを起動して実行するためのファイルです。 .. literalinclude:: ../samples/02/manage.py flaskr/__init__.py ------------------ FlaskとプラグインのSQLAlchemyを生成します。 .. literalinclude:: ../samples/02/flaskr/__init__.py app.config.from_object('flaskr.config')はFlaskのconfigが 設定ファイルを読み込む処理で、他にも以下のような処理があります。 * app.config.from_envvar: 環境変数から読み込む * app.config.from_object: pythonオブジェクトから読み込む * app.config.from_pyfile: pythonファイルから読み込む flaskr/config.py ---------------- データベースの設定と、セッション情報を暗号化するためのキーを設定します。 .. literalinclude:: ../samples/02/flaskr/config.py 実際に運用する場合には、SECRET_KEYは必ず変更して下さい。 ちなみにFlaskのドキュメントには、以下のように生成すると良いと書かれています。:: >>> import os >>> os.urandom(24) '\xfd{H\flash: xe5<\x95\xf9\xe3\x96.5\xd1\x01O>> from flaskr.models import init >>> init() これで、flaskr/flaskr.dbが生成されてます。 動作を確認してみましょう。:: $ python >>> from flaskr.models import Entry, db >>> Entry.query.all() [] >>> entry = Entry(title='title', text='text') >>> db.session.add(entry) >>> db.session.commit() >>> Entry.query.all() [] >>> entry = Entry.query.get(1) >>> entry >>> entry.title = 'Hello world' >>> db.session.add(entry) >>> db.session.commit() >>> Entry.query.all() [] >>> entry = Entry.query.filter(Entry.title == 'Hello world').first() >>> entry >>> db.session.delete(entry) >>> db.session.commit() >>> Entry.query.all() [] Step 2 ====== ブログの一覧と投稿画面を作ります。 投稿画面はログインしているときのみ操作できるようにします。 flaskr/views.py .. literalinclude:: ../samples/02/flaskr/views.py :request: HTTPリクエストオブジェクト methodやフォームデータにアクセスできる :render_template: 指定したHTMLテンプレートを使ってレスポンスを返す。 :redirect: 指定したURLにリダイレクトするレスポンスを返す。 :url_for: 指定したエンドポイントに対するURLを返す。 :abort: 指定したHTTPステータスコードのエラーを返す。 :flash: メッセージを通知するための仕組み Step 3 ====== htmlテンプレートとcssを作ります。 flaskr/template/layout.html .. literalinclude:: ../samples/02/flaskr/templates/layout.html :language: html flaskr/templates/show_entries.html .. literalinclude:: ../samples/02/flaskr/templates/show_entries.html :language: html flaskr/static/style.css .. literalinclude:: ../samples/02/flaskr/static/style.css 動かしてみる ============= :: python manage.py http://127.0.0.1:5000 をブラウザで開いて動作を確認してください。