読者です 読者をやめる 読者になる 読者になる

AppEngine 用の Flask 拡張作ってみた

先日、AppEngine 向けには自分用のツールだけを開発すると宣言しました。

自分用のツールなら Kay みたいなヘビー級のフレームワークを使うまでもないです。なので、Flask を使っています。


ただ、Flask はビューとテンプレートの機能ぐらいしか提供していないので、足りない機能は他のライブラリで補う必要があります。AppEngine なら、モデルは db モジュール、フォームは WTForms を使えばいいですね。


でも、それだけではまだ不便。そこで AppEngine ユーティリティを集めた Flask 拡張を作ってみました。

login_required デコレータや、get_or_404 関数のような、Flask での AppEngine 開発がちょっとだけ便利になるユーティリティを集めています。ちりも積もればなんとやら、です。


使い方はこんな感じ。

from flask import Flask
from flask_appengine import (
    AppEngine, login_required,
)

app = Flask(__name__)
gae = AppEngine(app) # 内部で ContextProcessers がセットされる

@app.route("/")
@login_required
def index():
    return "Hello, world!"

あと、AppEngine クラスは内部で ContextProcessers を登録するので

<!DOCTYPE html>
<html>
    <head>
        <title>FlaskAppEngineSample</title>
    </head>
    <body>
        {% if get_current_user() %}
        <a href="{{ create_logout_url() }}">logout</a>
        {% else %}
        <a href="{{ create_login_url() }}">login</a>
        {% endif %}
    </body>
</html>

という風に、テンプレート内で Users API が使えます。これは結構便利かも。


AppEngine の全ての機能をサポートしようとしたら半端ない量になるので、バランスを考えながら機能を追加していく予定。必要最小限の機能を提供するのが Flask っぽいですから。とりあえず、Flask のセッションでデータストアを使うようにはしたいです。あと appstats のサポートも。