BottleのなかみはElixirできまり!!

http://farm3.static.flickr.com/2727/4410857492_f258c36c9b.jpg

Bottle はURLマッピング、独自のテンプレートエンジン等を特徴とした、 シンプルなPythonのWebフレームワークです。 ElixirSQLAlchemy をラップしたORMapperなモジュールです。 タイトルはまぁそのー、、、うまいこと言ってみました。

Bottleのチュートリアル を練習がてら写経してみます。 チュートリアルではSQLを直にたたいている感じですが、 ちょっとめんどくさそうなのでElixirを使ってみることにしました。

インストール

bottoleとelixirをpip経由でインストールします。

$ pip install bottle
$ pip install elixir

準備は完了です。 私はテンプレートエンジンに Jinja2 を使用しました。 その他外部モジュールを使用する場合は適宜インストールしてください。

BottleでJinja2のテンプレートを使う

jinja2_template をインポートすればJinja2をテンプレートエンジンに使えます。 チュートリアルのコードと同じにするなら、以下のようなコードになります。

from bottle import jinja2_template as template

Elixirを使う

私はモデルを model.py に書いて、コントローラ側のコード todo.py で インポートして使いました。Djangoチックですね。 todoリストのモデルは以下のようになります。

from elixir import Entity, Field, Unicode, Boolean

class Todo(Entity):
    task = Field(Unicode(100))
    status = Field(Boolean)

コントローラ側では、sqliteのDBパスを metadata.bind で指定して、 setup_all() でDBを作成します。 setup_all() の第1引数を True にすると DBファイルがなければ作成してくれます。

from bottle import run
from elixir import setup_all, metadata

if __name__ == '__main__':
    metadata.bind = "sqlite:///./todo.sqlite"
    setup_all(True)
    run()

DBの操作は、 インスタンス生成して、 session.commit() すれば INSERTModel.query.filter_by()SELECTDELETESELECT 等でDBからオブジェクトを引っ張ってきて、 model.delete() 後に session.commit() 。 まぁ、コードを見てもらった方がわかりやすいかと思います。 チュートリアル を参考にしてみてください。

できたのが、これ。

あとは、チュートリアルを参考にしながらいじり倒すのが良いかと。 そのうち止めると思いますが、チュートリアルを参考に作ったデモ (http://todo.hexacosa.net/todo)を試しにさわって見てください。

コードも公開してますので、参考になれば。 (http://www.hexacosa.net/hgrepos/bottle-todo-tutorial_with-elixir/)

最後に

BottleにはORM以外にもセッション管理や認証の機能がありません。 その辺の機能を効率よく書きたいのであれば、別のモジュールを使う方が効率が良さそうです。 セッション管理には Beaker が良さそうな感じがしてます。 ( Juno でも使われてたような。。)

さて、そろそろFlickrクローンでもつくりはじめるかな。