2007年11月25日

TempitaとかWebOb使ってミニマルフレームワーク


http://aodagx.ddo.jp/aodag/repositories/ablog/
勢いで作った。
まだ、認証が入ってないけど反省はしていない。



使ったのは、以下のもの。


Tempita

テンプレートエンジン

WebOb

リクエストとレスポンスオブジェクト

urlrelay

ディスパッチャ

FormEncode

入力チェック


Tempita使ってみたかったのと、WebObって何?という疑問から始まってるので、あまり目新しいことはないと思います。



とりあえずコード例

@expose('^/new$')
def new(errors={}):
return render('form.html', errors=errors)

@expose('^/save$')
@validate(validator=EntrySchema(), error_handler=new)
def save():
params = request.environ['form_result']
store = request.environ['storm.store']
entry = Entry(title=params['title'],
contents=params['contents'])
store.add(entry)
store.flush()
store.commit()
return render('entry.html', entry=entry)




RoutesはRouteでまあ、Helperとの連携がいいんですがURLが解決される順番がよーわからんときがあって、urlrelayで正規表現形式のディスパッチをしてます。
urlrelayは、1インスタンスが前提のようなので、selectorを使った方がいいのかもしれません。
requestはWebObをスレッドローカルに使ってます。
renderは内部でtempita呼んでるだけですが、requestとかをテンプレート内で使えるようにしてます。



ちなみに、urlrelayは内部でディスパッチ先のチェックで、AttributeErrorとImportErrorを見ているらしく、アプリ内でこれらの例外を発生させると、URLRelayの中で勝手に404にされてしまいます。
うーんselectorにしとこうかなぁ