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