Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

細くもとい補足

某氏が一生懸命あちこちでコメント残しているようなので。
もうちょっと捕捉してみよう。

Ajax

Workshopでは時間切れで比較できなかったAjax
DjangoAjaxを簡単に使う機構を持ちません。
そもそもAjaxはUIよりの技術なので「実務の何を解決するのか?」に重みを置いているDjangoでは後回しになっています。
(なくてはならないか?というとなくてもなんとかなる事が多い)
一応magic-removal以降、Dojoをバンドルする話がありますので今後は開発される可能性が高いです。
今すぐ使いたいという人は一応DjangoAjaxというcontribがあります。http://opensvn.csie.org/django_ajax/trunk/
(protoytpe.jsを使用)

もしくは私がてきとーに作ってるYADA(RailsのRJSをDjangoで実装。Dojoを使用)なんてのもあります。
Dojoを使っている理由はバンドルされるからという他にもWidget+DataProviderでAutoCompleteなど割と簡単に実現できそうだからです。
DataProviderの考え方はWindowsアプリケーションのDataSourceの指定に近いです。

Widget

TurboGearsにはWidgetという考え方があるようですがDjangoには特にありません。
Widgetとは一連のinputなどをひとまとめにする機能。と思ってますけど・・・)
Djangoは管理画面を見てもらうとわかりますがFormの生成を動的に行っています。
実はFormの生成を手助けするhelperが存在します。
FormWrapperにモデルを突っ込むとそれに対応したHTMLのinputを作ってくれます。
なのでTurboGearsと同じくWidgetかしたい場合はFormWrapperを拡張することで実現可能です。
Widgetは個人的にはあんましいらない機能ではありますが。)
またDojoを使うとDojoWidgetが使えるのでそちらの方が良い(特にAjaxを絡める場合)と思います。
javascriptで一貫して書けますので)

セキュリティ

実はDjangoTurboGears共に組み込みで認証機能を持っています。
で更に各モデルに対し、

  • 作成可能
  • 更新可能
  • 削除可能

のロールが設定できます。
(これも組み込み)
これらは管理画面から設定するのでコード書かなくても良いです。

更にメソッド単位でもセキュリテイロールは設定可能です。
メソッド単位で設定する場合はデコレータを使います。
Djangoの場合デフォルトで

  • ログイン済みかチェックするデコレータ
  • ログイン済みかチェックする+評価関数を渡せるデコレータ

を持っていますので用途に合わせて使い分けると良いでしょう。
(__init__.py辺りを絡めるとAOPチックにできそうです)

あとCAPTCHAも割と簡単に組み込めます。
(私組み込んだことあり)

モデルの継承

lirisさんところにもありますがモデルの継承はDjangoではまだ出来ません。
Object的には属性を継承しますが、DBがついていってくれません。
(完全な別テーブル、別データとして扱われる)
詳細はこちらにあります。
ModelInheritance – Django
内部でJOINしてデータも継承されるようになる予定です。
別データで良いのであれば現状でも出来ると言えるでしょう。
PostgreSQLな方は一度作成したテーブルを削除し、PostgreSQLの継承を使い手動で作り直したりするなどすればいいとは思います。

Templateの補足

一応テンプレートの拡張子はhtmlです。
開けないってことはありません。
それにblockは子供がオーバライドして中身を埋めるわけなのでダミー値は入れられるので思ったほど使い心地は悪くありません。
Velocityに近いっちゃあ近いです。
タグは簡単に拡張できます。
javaJSPタグなんかに比べれば屁みたいもんです。
あとTemplateはview以外にも使えます。
通知メールのテンプレ、XMLのテンプレなどなんにでも使えます。

Cache

Workshopでも一部取り上げられていましたが。
CacheのAPIが実は充実しています。
HTTPのヘッダの任意の値をキーにしてユーザごとに複数のキャッシュ持たせたりとかも出来ます。
CacheのAPIは低レベルなものまでサポートしています。
なのでデコレータを書くだけで任意のメソッド結果をCache化できます。
リアルタイム性があまり内箇所でパフォーマンス的に遅い箇所はかたっぱしからCache化なーんてこともできちゃいます。
(デコレータなので既存ロジックに変更も入らないし)
本格的にCache化をする場合でもmemcachedを複数分散で指定できるのでかなり便利です。
(これはmemcachedが便利なだけか)

Djangoの良さ

機能だけでいうとTurboGearsに劣って見えますが、Djangoの良さは

シンプルにやりたいことが実現できる

という所だと思います。
さらに制限があまりないので書きたいように書けます。
全て独自で作りこんでいる分やはり一筆書きに近い間隔で物が作れるのは強みだと思います。
また重厚なイメージがあるようですが実際には重厚ではありません。
web.pyにも負けないくらいシンプルさがあります。
(web.pyの中にはDjangoからパクってきたソースもある)
書きたいように書けるので拡張性も高いです。
そのため、アレコレが足りないって言った場合でも自分で簡単に拡張できます。


とーりあえずこんな感じでどーでしょ???
良さが少しでも伝わったかな?
うくく。