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にしとこうかなぁ
|