BottleのなかみはElixirできまり!!
2010-03-06 - ⧖ 1.0 min
Bottle はURLマッピング、独自のテンプレートエンジン等を特徴とした、 シンプルなPythonのWebフレームワークです。 Elixir は SQLAlchemy をラップした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() すれば INSERT 。 Model.query.filter_by() で SELECT 。 DELETE は SELECT 等で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クローンでもつくりはじめるかな。