API встроенных представлений-классов¶
Описание API представлений-классов. Подробности смотрите в Представления-классы (Class-based views, CBV).
- Базовые представления
- Общие виды отображения
- Общие представления редактирования
- Общие представления даты
- Примеси CBV(Class-based views mixins)
- Общие представления-классы(Class-based generic views - flattened index)
Спецификация¶
Состояние представления-класса независимо для каждого обрабатываемого запроса. Поэтому можно безопасно сохранять переменные к экземпляре представления (например, self.foo = 3 - потокобезопасная операция).
Представление на основе классов развертывается в шаблоне URL-адресов с помощью метода класса as_view():
urlpatterns = [
path("view/", MyView.as_view(size=42)),
]
Потокобезопасность аргументов представления
Аргументы, которые передаются в представление, общие для всех экземпляров представления. Это означает, что вы не должны использовать списки, словари, или любой другой изменяемый объект в качестве аргумента представления. Если вы не будете следовать этому правилу, действия одного пользователя могут повлиять на обработку запроса другого пользователя.
Аргументы, переданные в as_view(), будут присвоены экземпляру, который используется для обслуживания запроса. Если использовать предыдущий пример, это означает, что каждый запрос к MyView может использовать self.size. Аргументы должны соответствовать атрибутам, которые уже существуют в классе (возврат True при проверке hasattr).
Базовые и общие(Generic) представления¶
Базовые представления классы - это родительские представления, которые можно использовать на прямую, или наследоваться от них. Они могут не предоставлять весь необходимый для проекта функционал, в таком случае добавляйте к ним миксины.
Общие представления Django построены на основе базовых, и были созданы для стандартных ситуаций, например получить объект и отрендерить его страницу. Они позволяют легко решить стандартные задачи.
Большинство общих представлений используют параметр queryset, который является экземпляром QuerySet. Подробности о QuerySet смотрите в Выполнение запросов.