ビルトインのクラスベースビュー API¶
クラスベースビュー API のリファレンスです。前置きとして、トピックガイドの クラスベースビュー をご覧ください。
仕様¶
クラスベースビューによって提供される各リクエストは、独立した状態を持っています。そのため、状態変数をインスタンスに格納するのは安全です (例: self.foo = 3
はスレッドセーフな操作です) 。
クラスベースビューは as_view()
クラスメソッドを使って URL パターンに記述されます。
urlpatterns = [
path('view/', MyView.as_view(size=42)),
]
ビューの引数によるスレッドの安全性
ビューから渡される引数は、ビューのすべてのインスタンスに共有されます。なのでリストやディクショナリ、または他の変更なオブジェクトを使用しないでください。共有オブジェクトが変更された場合、ビューにアクセスしたあるユーザーのアクションが、同じビューにアクセスする後続のユーザーに影響を与える可能性があります。
as_view()
に渡された引数は、リクエストを処理するために使用されるインスタンスに割り当てられます。 前の例を使用すると、MyView
のすべてのリクエストが self.size
を使用できることを意味します。 引数はクラスにすでに存在する属性に対応していなければなりません (hasattrチェックで ``True
を返します)。
Base vs Generic views¶
ベースクラスベースのビューは 親の ビューとして考えることができ、それ自体で使用することも継承することもできます。プロジェクトに必要なすべての機能を提供していないかもしれませんが、その場合はベースビューが行えることを拡張するミックスインがあります。
Django のジェネリックビューは、ベースビューから構築され、オブジェクトの詳細を表示するなどの一般的な使用パターンのショートカットとして開発されました。 ビューの開発で見つかった一定の共通したイディオムやパターンを取り、それらを抽象化して、自分で繰り返し行わなくてもデータの一般的なビューを素早く作成することができます。
ほとんどのジェネリックビューでは、QuerySet
インスタンスである queryset
キーが必要です。 QuerySet
オブジェクトの詳細については、 クエリを作成する を参照してください。