# Django 5.2.8 documentation

# 内置基于类的视图 API

基于类的视图 API 参考。关于介绍性材料，请参见 基于类的视图 主题指南。

- 基础视图
  - `View`
  - `TemplateView`
  - `RedirectView`
- 通用显示视图
  - `DetailView`
  - `ListView`
- 通用编辑视图
  - `FormView`
  - `CreateView`
  - `UpdateView`
  - `DeleteView`
- 通用日期视图
  - `ArchiveIndexView`
  - `YearArchiveView`
  - `MonthArchiveView`
  - `WeekArchiveView`
  - `DayArchiveView`
  - `TodayArchiveView`
  - `DateDetailView`
- 基于类的视图混入
  - 简单混入
    - `ContextMixin`
    - `TemplateResponseMixin`
  - 单对象混入
    - `SingleObjectMixin`
    - `SingleObjectTemplateResponseMixin`
  - 多对象混入
    - `MultipleObjectMixin`
    - `MultipleObjectTemplateResponseMixin`
  - 编辑混入
    - `FormMixin`
    - `ModelFormMixin`
    - `ProcessFormView`
    - `DeletionMixin`
  - 基于日期的混入
    - `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` 是一个线程安全的操作）。

A class-based view is deployed into a URL pattern using the `as_view()` classmethod:

    urlpatterns = [
        path("view/", MyView.as_view(size=42)),
    ]

线程安全与视图参数

传递给视图的参数在视图的每个实例之间共享。这意味着你不应该使用列表、字典或任何其他可更改的对象作为视图的参数。如果你这样做了，而共享对象又被修改了，那么访问你视图的一个用户的行为可能会对访问同一视图的后续用户产生影响。

Arguments passed into `as_view()` will be assigned onto the instance that is used to service a request. Using the previous example, this means that every request on `MyView` is able to use `self.size`. Arguments must correspond to attributes that already exist on the class (return `True` on a `hasattr` check).

## 基础 vs 通用视图

基于类的基本视图可被视为 父 类视图，可自行使用或继承。它们可能无法提供项目所需的所有功能，在这种情况下，有混入来扩展基本视图的功能。

Django 的通用视图是在这些基础视图的基础上建立起来的，是作为显示对象详情等常见使用模式的快捷方式而开发的。它们采用了视图开发中的某些常见的习惯和模式，并将其抽象化，这样你就可以快速编写数据的通用视图，而不必重复。

大多数通用视图需要使用 `queryset` 键，它是一个 `QuerySet` 实例；关于 `QuerySet` 对象的更多信息，请参见 执行查询。