# Django 4.1.8.dev20230308103347 ドキュメント

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

クラスベースビュー API のリファレンスです。前置きとして、トピックガイドの クラスベースビュー をご覧ください。

- Base views
  - `View`
  - `TemplateView`
  - `RedirectView`
- Generic display ビュー
  - Detail Views
  - List Views
- Generic editing ビュー
  - `FormView`
  - `CreateView`
  - `UpdateView`
  - `DeleteView`
- Generic date ビュー
  - `ArchiveIndexView`
  - `YearArchiveView`
  - `MonthArchiveView`
  - `WeekArchiveView`
  - `DayArchiveView`
  - `TodayArchiveView`
  - `DateDetailView`
- クラスベースビュー mixin
  - Simple mixins
    - `ContextMixin`
    - `TemplateResponseMixin`
  - Single object mixins
    - `SingleObjectMixin`
    - `SingleObjectTemplateResponseMixin`
  - Multiple object mixins
    - `MultipleObjectMixin`
    - `MultipleObjectTemplateResponseMixin`
  - mixinを編集する
    - `FormMixin`
    - `ModelFormMixin`
    - `ProcessFormView`
    - `DeletionMixin`
  - Date-based mixins
    - `YearMixin`
    - `MonthMixin`
    - `DayMixin`
    - `WeekMixin`
    - `DateMixin`
    - `BaseDateListView`
- クラスベース汎用ビュー - フラットインデックス
  - シンプルな汎用ビュー
    - `View`
    - `TemplateView`
    - `RedirectView`
  - 詳細のビュー
    - Detail Views
  - リストのビュー
    - List Views
  - 編集するためのビュー
    - `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` を返します)。

## Base vs Generic views

ベースクラスベースのビューは 親の ビューとして考えることができ、それ自体で使用することも継承することもできます。プロジェクトに必要なすべての機能を提供していないかもしれませんが、その場合はベースビューが行えることを拡張するミックスインがあります。

Django のジェネリックビューは、ベースビューから構築され、オブジェクトの詳細を表示するなどの一般的な使用パターンのショートカットとして開発されました。 ビューの開発で見つかった一定の共通したイディオムやパターンを取り、それらを抽象化して、自分で繰り返し行わなくてもデータの一般的なビューを素早く作成することができます。

ほとんどのジェネリックビューでは、`QuerySet` インスタンスである `queryset` キーが必要です。 `QuerySet` オブジェクトの詳細については、 クエリを作成する を参照してください。