API встроенных представлений-классов

Описание API представлений-классов. Подробности смотрите в Представления-классы (Class-based views, CBV).

Спецификация

Состояние представления-класса независимо для каждого обрабатываемого запроса. Поэтому можно безопасно сохранять переменные к экземпляре представления (например, self.foo = 3 - потокобезопасная операция).

Представление-класс назначается на URL-шаблон с использованием метода класса as_view():

urlpatterns = [
    url(r'^view/$', MyView.as_view(size=42)),
]

Потокобезопасность аргументов представления

Аргументы, которые передаются в представление, общие для всех экземпляров представления. Это означает, что вы не должны использовать списки, словари, или любой другой изменяемый объект в качестве аргумента представления. Если вы не будете следовать этому правилу, действия одного пользователя могут повлиять на обработку запроса другого пользователя.

Аргументы, переданные в as_view(), будут добавлены в экземпляр представления, которое обрабатывает запрос. В примере выше это означает, что каждый запрос к MyView может использовать self.size. Аргументы должны соответствовать атрибутам, которые существуют в классе (возвращают True при проверке через hasattr).

Базовые и общие(Generic) представления

Базовые представления классы - это родительские представления, которые можно использовать на прямую, или наследоваться от них. Они могут не предоставлять весь необходимый для проекта функционал, в таком случае добавляйте к ним миксины.

Общие представления Django построены на основе базовых, и были созданы для стандартных ситуаций, например получить объект и отрендерить его страницу. Они позволяют легко решить стандартные задачи.

Большинство общих представлений используют параметр queryset, который является экземпляром QuerySet. Подробности о QuerySet смотрите в Выполнение запросов.