---
title: "Built-in class-based views API"
version: 6.1
locale: en
source: https://docs.djangoproject.com/en/6.1/ref/class-based-views/
canonical: https://djangodocs.dev/en/6.1/ref/class-based-views/
---
# Built-in class-based views API

Class-based views API reference. For introductory material, see the
[Class-based views](/en/6.1/topics/class-based-views/) topic guide.

- [Base views](/en/6.1/ref/class-based-views/base/)

  - [`View`](/en/6.1/ref/class-based-views/base/#view)
  - [`TemplateView`](/en/6.1/ref/class-based-views/base/#templateview)
  - [`RedirectView`](/en/6.1/ref/class-based-views/base/#redirectview)
- [Generic display views](/en/6.1/ref/class-based-views/generic-display/)

  - [`DetailView`](/en/6.1/ref/class-based-views/generic-display/#detailview)
  - [`ListView`](/en/6.1/ref/class-based-views/generic-display/#listview)
- [Generic editing views](/en/6.1/ref/class-based-views/generic-editing/)

  - [`FormView`](/en/6.1/ref/class-based-views/generic-editing/#formview)
  - [`CreateView`](/en/6.1/ref/class-based-views/generic-editing/#createview)
  - [`UpdateView`](/en/6.1/ref/class-based-views/generic-editing/#updateview)
  - [`DeleteView`](/en/6.1/ref/class-based-views/generic-editing/#deleteview)
- [Generic date views](/en/6.1/ref/class-based-views/generic-date-based/)

  - [`ArchiveIndexView`](/en/6.1/ref/class-based-views/generic-date-based/#archiveindexview)
  - [`YearArchiveView`](/en/6.1/ref/class-based-views/generic-date-based/#yeararchiveview)
  - [`MonthArchiveView`](/en/6.1/ref/class-based-views/generic-date-based/#montharchiveview)
  - [`WeekArchiveView`](/en/6.1/ref/class-based-views/generic-date-based/#weekarchiveview)
  - [`DayArchiveView`](/en/6.1/ref/class-based-views/generic-date-based/#dayarchiveview)
  - [`TodayArchiveView`](/en/6.1/ref/class-based-views/generic-date-based/#todayarchiveview)
  - [`DateDetailView`](/en/6.1/ref/class-based-views/generic-date-based/#datedetailview)
- [Class-based views mixins](/en/6.1/ref/class-based-views/mixins/)

  - [Simple mixins](/en/6.1/ref/class-based-views/mixins-simple/)

    - [`ContextMixin`](/en/6.1/ref/class-based-views/mixins-simple/#contextmixin)
    - [`TemplateResponseMixin`](/en/6.1/ref/class-based-views/mixins-simple/#templateresponsemixin)
  - [Single object mixins](/en/6.1/ref/class-based-views/mixins-single-object/)

    - [`SingleObjectMixin`](/en/6.1/ref/class-based-views/mixins-single-object/#singleobjectmixin)
    - [`SingleObjectTemplateResponseMixin`](/en/6.1/ref/class-based-views/mixins-single-object/#singleobjecttemplateresponsemixin)
  - [Multiple object mixins](/en/6.1/ref/class-based-views/mixins-multiple-object/)

    - [`MultipleObjectMixin`](/en/6.1/ref/class-based-views/mixins-multiple-object/#multipleobjectmixin)
    - [`MultipleObjectTemplateResponseMixin`](/en/6.1/ref/class-based-views/mixins-multiple-object/#multipleobjecttemplateresponsemixin)
  - [Editing mixins](/en/6.1/ref/class-based-views/mixins-editing/)

    - [`FormMixin`](/en/6.1/ref/class-based-views/mixins-editing/#formmixin)
    - [`ModelFormMixin`](/en/6.1/ref/class-based-views/mixins-editing/#modelformmixin)
    - [`ProcessFormView`](/en/6.1/ref/class-based-views/mixins-editing/#processformview)
    - [`DeletionMixin`](/en/6.1/ref/class-based-views/mixins-editing/#deletionmixin)
  - [Date-based mixins](/en/6.1/ref/class-based-views/mixins-date-based/)

    - [`YearMixin`](/en/6.1/ref/class-based-views/mixins-date-based/#yearmixin)
    - [`MonthMixin`](/en/6.1/ref/class-based-views/mixins-date-based/#monthmixin)
    - [`DayMixin`](/en/6.1/ref/class-based-views/mixins-date-based/#daymixin)
    - [`WeekMixin`](/en/6.1/ref/class-based-views/mixins-date-based/#weekmixin)
    - [`DateMixin`](/en/6.1/ref/class-based-views/mixins-date-based/#datemixin)
    - [`BaseDateListView`](/en/6.1/ref/class-based-views/mixins-date-based/#basedatelistview)
- [Class-based generic views - flattened index](/en/6.1/ref/class-based-views/flattened-index/)

  - [Simple generic views](/en/6.1/ref/class-based-views/flattened-index/#simple-generic-views)

    - [`View`](/en/6.1/ref/class-based-views/flattened-index/#view)
    - [`TemplateView`](/en/6.1/ref/class-based-views/flattened-index/#templateview)
    - [`RedirectView`](/en/6.1/ref/class-based-views/flattened-index/#redirectview)
  - [Detail Views](/en/6.1/ref/class-based-views/flattened-index/#detail-views)

    - [`DetailView`](/en/6.1/ref/class-based-views/flattened-index/#detailview)
  - [List Views](/en/6.1/ref/class-based-views/flattened-index/#list-views)

    - [`ListView`](/en/6.1/ref/class-based-views/flattened-index/#listview)
  - [Editing views](/en/6.1/ref/class-based-views/flattened-index/#editing-views)

    - [`FormView`](/en/6.1/ref/class-based-views/flattened-index/#formview)
    - [`CreateView`](/en/6.1/ref/class-based-views/flattened-index/#createview)
    - [`UpdateView`](/en/6.1/ref/class-based-views/flattened-index/#updateview)
    - [`DeleteView`](/en/6.1/ref/class-based-views/flattened-index/#deleteview)
  - [Date-based views](/en/6.1/ref/class-based-views/flattened-index/#date-based-views)

    - [`ArchiveIndexView`](/en/6.1/ref/class-based-views/flattened-index/#archiveindexview)
    - [`YearArchiveView`](/en/6.1/ref/class-based-views/flattened-index/#yeararchiveview)
    - [`MonthArchiveView`](/en/6.1/ref/class-based-views/flattened-index/#montharchiveview)
    - [`WeekArchiveView`](/en/6.1/ref/class-based-views/flattened-index/#weekarchiveview)
    - [`DayArchiveView`](/en/6.1/ref/class-based-views/flattened-index/#dayarchiveview)
    - [`TodayArchiveView`](/en/6.1/ref/class-based-views/flattened-index/#todayarchiveview)
    - [`DateDetailView`](/en/6.1/ref/class-based-views/flattened-index/#datedetailview)

## Specification

Each request served by a class-based view has an independent state; therefore,
it is safe to store state variables on the instance (i.e., `self.foo = 3` is
a thread-safe operation).

A class-based view is deployed into a URL pattern using the
[`as_view()`](/en/6.1/ref/class-based-views/base/#django.views.generic.base.View.as_view) classmethod:

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

> **Thread safety with view arguments**
>
> Arguments passed to a view are shared between every instance of a view.
> This means that you shouldn’t use a list, dictionary, or any other
> mutable object as an argument to a view. If you do and the shared object
> is modified, the actions of one user visiting your view could have an
> effect on subsequent users visiting the same view.

Arguments passed into [`as_view()`](/en/6.1/ref/class-based-views/base/#django.views.generic.base.View.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).

## Base vs Generic views

Base class-based views can be thought of as *parent* views, which can be
used by themselves or inherited from. They may not provide all the
capabilities required for projects, in which case there are Mixins which
extend what base views can do.

Django’s generic views are built off of those base views, and were developed
as a shortcut for common usage patterns such as displaying the details of an
object. They take certain common idioms and patterns found in view
development and abstract them so that you can quickly write common views of
data without having to repeat yourself.

Most generic views require the `queryset` key, which is a `QuerySet`
instance; see [Making queries](/en/6.1/topics/db/queries/) for more information about `QuerySet`
objects.
