class-based viewsに関して
djangoのviewは単なる関数ベースでの記述方法とクラスベースでの記述方法がある。djangoのドキュメントによれば、最初は関数ベースの規約があるのみだったがVIEW開発の経験がたまるにつれてパターンや共通のイディオムが存在することが認識され、抽象化されるに至った、らしい。
開発者はそれらの成果を「generic view」として利用することができる。genericという英語は日本語にすると「汎用的」などという意味になる。ドキュメントを一瞥してsampleをちょっと利用するぐらいでも使えないことはないが、正直どう動いているのかがわかりづらかった。
めんどくさいと思いつつ調べてみたら意外とキレイにコンパクトにまとまっていたので、そこまで時間もかからなかった。伊達に「汎用的」な構造になっているわけではなかった。class-baseなviewを書いていて、どこにどのロジックを入れればよいのか迷ったときはこのクラス図を見れば大体アタリがつくようになった気もしている。
下記の画像のクラス図はdjango.views.generic以下に収まっているクラスの関連を書き出しています。
フィールドやメソッドは端折って書いていないものもある。
クラスの依存関係はPyCharmの機能を使って楽に調べることができました。該当ファイルを開いてAlt-7で下記のようにクラスのみを左側に表示させる事ができました。(コードの折りたたみも別途できる。)
クラス図の作成はEnterprise Architect使った。