# Django 5.0.9.dev20240806133106 ドキュメント

# ビルトインのクラスベースビュー API

クラスベースビュー API のリファレンスです。入門的な内容については クラスベースビュー トピックガイド を参照してください。

- ベース・ビュー
  - `View`
  - `TemplateView`
  - `RedirectView`
- ジェネリック表示ビュー (Generic display view)
  - `DetailView`
  - `ListView`
- ジェネリック編集ビュー (Generic editing view)
  - `FormView`
  - `CreateView`
  - `UpdateView`
  - `DeleteView`
- ジェネリック日付ビュー
  - `ArchiveIndexView`
  - `YearArchiveView`
  - `MonthArchiveView`
  - `WeekArchiveView`
  - `DayArchiveView`
  - `TodayArchiveView`
  - `DateDetailView`
- クラスベースビューのミックスイン (mixin)
  - シンプルなミックスイン (mixin)
    - `ContextMixin`
    - `TemplateResponseMixin`
  - 単一オブジェクト ミックスイン (Single object mixin)
    - `SingleObjectMixin`
    - `SingleObjectTemplateResponseMixin`
  - 複数オブジェクトミックスイン (Multiple object mixin)
    - `MultipleObjectMixin`
    - `MultipleObjectTemplateResponseMixin`
  - ミックスイン (mixin) を編集する
    - `FormMixin`
    - `ModelFormMixin`
    - `ProcessFormView`
    - `DeletionMixin`
  - 日付ベースのミックスイン (mixin)
    - `YearMixin`
    - `MonthMixin`
    - `DayMixin`
    - `WeekMixin`
    - `DateMixin`
    - `BaseDateListView`
- クラスベースのジェネリックビュー: フラットインデックス
  - シンプルなジェネリックビュー
    - `View`
    - `TemplateView`
    - `RedirectView`
  - 詳細ビュー
    - `DetailView`
  - リストビュー
    - `ListView`
  - 編集ビュー
    - `FormView`
    - `CreateView`
    - `UpdateView`
    - `DeleteView`
  - 日付ベースのビュー
    - `ArchiveIndexView`
    - `YearArchiveView`
    - `MonthArchiveView`
    - `WeekArchiveView`
    - `DayArchiveView`
    - `TodayArchiveView`
    - `DateDetailView`

## 仕様

クラスベースビューによって提供される各リクエストは、独立した状態を持っています。そのため、状態変数をインスタンスに格納するのは安全です (例: `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` オブジェクトの詳細については、 クエリを作成する を参照してください。