FlaskをGoogle App Engineで使ってみる

以前、どこかの勉強会で耳にしたflaskというフレームワークを使ってみました。

その時の情報をメモります。

入り口は"Pythonのマイクロフレームワーク「Flask」ならApp EngineのTwitter Botが15行で書ける | TRIVIAL TECHNOLOGIES 4 @ats のイクメン日記"から

Flaskとgoogle app engineでググッたところ、上記ページが1ページ目にできてきたので、まずはどんなものかと思いのぞいてみました。
こちらのブログでFlask導入の手順が記述されているため、それに倣って進めることで簡単に導入することができました。
とゆーか、Flaskがシンプルであるため理解にあまり時間がかからなかったことが大きいと思います。
まずは何も考えずにTODOサンプルをgithubよりダウンロー&解凍して配置するだけですね。google app engineでアプリを公開したことがある方ならつまずく所はないと思います。

ブログのソースをながめていてふと思ったこととして、wsgiとしてのアプリケーション登録がない点でした。
そこで、TODOサンプルプログラムのapp.yamlを見たところ、パス"/"をapp.pyに流すようになっていたので、納得いきました。
wsgiref.handlersのCGIHandlerを使ってるんですね。あとはFlaskクラスでリクエスト/レスポンスなど色々な処理をしているって寸法だと理解しました。

次にクイックスタートを見て概要を掴む

どんな機能があるのか知りたくなったため、ググってflaskのクイックスタート日本語ページ"Bitbucket | The Git solution for professional teams"を見つけました。こちらのページをザーッと眺めることで大体の機能が把握できると思います。
@atusiさん、@ymotongpooさん、hirajunさんページの作成ありがとうございます。

ページを見ていて、メッセージフラッシングについてはよく理解できませんでした。自分的には、一時出力(一時的なレスポンスの返却)をすることができるものかな?と理解しました。そのうち検証してみたいと思います。

クイックスタートが理解できたら

クイックスタートの内容が理解できたら、"Bitbucket | The Git solution for professional teams"のユーザーガイドの項目リストを眺めてドキュメントの全体像、機能などを把握するのが良さそうです。途中から英語のページになってしまいますが、そこは頑張ってみていきます。

JSONでレスポンスを返すには

Webサービスを作成していて、レスポンスの制御をおこないたいと思いました。そこで、APIのリファレンスを見てみることにしました。
"Bitbucket | The Git solution for professional teams"では、レスポンスの制御について記述されており、そこにflask.jsonifyという関数がのっていました。こちらを使うことで、レスポンスの制御ができそうです。

アプリの規模が大きくなってきたら

自分はまだ必要ないのですが、"Flaskでおっきめのアプリになってきた時にモジュールで分ける方法 - When it’s ready."に分割のよい方法が記載されていました。もし必要になったら試してみたいと思います。

デバックモードでのサーバ起動

開発サーバを起動していて、werkzeugのdebuggerを使用しようと思いました。そこでググったところ、"http://www.codeshift.net/gae/flask-with-werkzeug-debugger-on-google-appengine"というページに情報がありました。
自分は単純にapp.debug=Trueとすれば動くと思っていたのですが、これだけでは足りないようです。appを別のものにしなくてはいけないようです。そのためには、パッチの適用とコードの書き換えが必要のようです。
こちらのパッチをダウンロードしてプロジェクトに組み込みます。その後、CGIHandler().run(app)を実行する前に以下のコードに書き換えます。

from werkzeug_debugger_appengine import get_debugged_app
app.debug=True
app = get_debugged_app(app)