-
Notifications
You must be signed in to change notification settings - Fork 9
publisher
提唱: Alisue
静的ページをURLから推測し、自動で対応するテンプレートを表示するアプリ。 Kawaz 2nd では静的ページの作成にflatpages appを使用していたが、この方法には下記のような問題点が存在する
- データベース上に構築するため、DBを更新するとデータが消失する
- 編集が admin サイトからしか行えないため Vim などのエディタを使用できない
- デフォルトの構成では Django のテンプレートエンジンが使えないため、パッチ的なハックを施す必要があった
特にテンプレートエンジンが使用不可な点が大きく、Kawaz 2ndでは既成アプリに対しパッチを施し使っていたため管理保守が難しくなっていた。
これを解決するためにユーザーが特定の(存在しない)アドレスに対しアクセスした場合に、そのURLから対象のテンプレートファイルを自動的に推定し、表示するアプリを提唱する。これは Django の Middleware 機能を用いれば比較的簡単に作成できる。
下記に未知のアドレスに対してアクセスがあった場合の流れを記載する。この流れはMiddlewareにて補足し、提唱アプリにて振り分けを行う。
- ユーザーが未知のアドレスに対しアクセス
- Django が指定されたアドレスが存在しないことを把握し
Http404
を投げる -
publisher
がMiddlewareにてHttp404
を補足し、URLからパスを推定(例: http://kawaz.org/hello/good/bye =>hello/good/bye.html
) - アクセスしたユーザーのログイン状態(Role状態)によりPrefixを推定(例: ログイン: protected, 非ログイン: public)
- 推定パスにPrefixをつけたファイルが存在するか、指定されたテンプレートディレクトリから探す(例:
/src/kawaz/templates/publisher/protected/hello/good/bye.html
) - 存在しない場合はPrefixを除き存在を確認する(例:
/src/kawaz/templates/publisher/hello/good/bye.html
) - それでも存在しない場合は
Http404
を再度投げる。存在した場合はそのテンプレートを表示する
現在 Kawaz 3rd は django-permission の機能をフル活用しRole based permission systemを構築している。
そのためユーザーは単純にログインユーザーと非ログインユーザーに分離できるわけではないため、テンプレートディレクトリにより分離する方法では対処が難しい可能性がある(要検討)。
また、データベースに情報を構築する flatpages app と異なり、テンプレートレベルでの作成になるためプログラマ以外が変更することが難しくなる。ただし、これに関しては静的なページの変更頻度がもともと低いことから問題にならないと考えている。変更頻度が高いものはannouncements
アプリでまかなえ、仮にどうしてもannouncements
では対応できない静的ページが必要になれば flatpages を補完的に使用すれば良い。