TurboGearsでRESTfulなURLを
Rootがあります。その下にusersがあります。その下にユーザID(atsとかfooとかbarとか)がぶら下がります。で,さらにupdateとかadd_entryとかハンドラ(メソッド)がぶら下がります。これがやりたいことです。
/users/(ats)/ /users/(ats)/[update] /users/(ats)/[add_entry]
usersはController由来のクラスです。(〜)の部分はDB依存で変化します。[〜]の部分は多分,controller由来のクラスにくっついたクラスメソッドです。
ユーザを追加すると真ん中が変わるので困ります。何とかしたいです。
解決法1 : usersクラスのdefault()でがんばる
引数をガッチンコしてuseridを取り出しつつmethodを呼んだり。でも,defaultがでかくなってメンテしにくそうだし,かといって華麗にやろうとおもうとセキュリティが心配。ていうかリクエストをbrokeする,みたいな低レベルの処理を書くのはなんかイケてない。
解決法2 : usersの下に,ユーザデータをハンドリングするクラスインスタンスを動的にくっつける
で,そのアトリビュートというかキーがatsとかfooとかいったユーザIDになっていると。usersのdefauultで引数をキーにしてDBに問い合わせ,動的にアトリビュートをくっつけたりするんだろうか。
Zopeみたいだ。ある意味スマートかも。でも可読性は悪い。かっちょいいけどアレゲ。
どうするのがスマートなんだろうなあ。
- Category(s)
- python
- The URL to Trackback this entry is:
- http://coreblog.org/ats/rest-full-url-on-turbogears/tbping





確かにそうですね(^^;
ご指摘感謝します:-)
ぼくは解決策1のほうでがんばっています。管理系は、/users/save/(liris)みたいにしていますが。。。
解決法2は面白そうなんですが、TGの流儀じゃないような感じ(ぼくの感覚ですが)がしてやっていません。TwistedのWebフレームワークは解決策2の方ですね(Zopeより?)。
blogearsのソースは,貴重なサンプルコードとして拝見させて頂いております:-)
そういえばfastdataが似たようなこと(DB上のデータのIDをURLの真ん中に持ってくる)やってたな,と思ってコードを見てみました
ちょっと華麗に,defaultでがんばっていました
http://trac.turbogears.org/turbogears/browser/trunk/turbogears/fastdata/datacontroller.py
セキュリティについては,デコレータ指定すれば守られるはずなので,心配する必要はないみたいですね
(もちろん,設計には十分気をつける必要がある)
RESTfulControllerなるクラスを作ればいいのかな
Djangoみたいに,正規表現でURLからデータを引っ張ってくるようにするとか