API встроенных представлений на основе классов
Ссылка на API представлений на основе классов. Для ознакомления см. руководство по представлениям на основе классов.
- Базовые представления
- Универсальные представления отображения
- Универсальные представления редактирования
- Универсальные представления по датам
- Миксины представлений на основе классов
- Универсальные представления на основе классов – уплощенный индекс
Спецификация
Каждое обращение, обрабатываемое представлением на основе класса, имеет независимое состояние; поэтому безопасным является хранение переменных состояния в экземпляре (т. е., self.foo = 3 — это потокобезопасная операция).
Представление на основе класса развертывается в шаблоне URL с помощью метода класса as_view():
urlpatterns = [
path('view/', MyView.as_view(size=42)),
]
Потоковая безопасность с аргументами представления
Аргументы, передаваемые представлению, общие для каждого экземпляра представления. Это означает, что вы не должны использовать список, словарь или любой другой изменяемый объект в качестве аргумента представления. Если вы это сделаете, и общий объект будет изменён, действия одного пользователя, посетившего ваше представление, могут повлиять на последующих пользователей, посещающих то же самое представление.
Аргументы, передаваемые в as_view(), будут присвоены экземпляру, используемому для обработки запроса. Используя предыдущий пример, это означает, что каждый запрос на MyView может использовать self.size. Аргументы должны соответствовать атрибутам, которые уже существуют в классе (возвращают True при проверке hasattr).
Базовые vs Универсальные представления
Базовые представления на основе классов можно рассматривать как родительские представления, которые можно использовать сами по себе или наследовать от них. Они могут не обеспечивать все возможности, необходимые для проектов, в которых есть миксины, расширяющие возможности базовых представлений.
Универсальные представления Django построены на основе этих базовых представлений и разработаны как сокращения для распространённых шаблонов использования, таких как отображение деталей объекта. Они берут определённые распространённые выражения и шаблоны, используемые в разработке представлений, и абстрагируют их, чтобы вы могли быстро написать общие представления данных, не повторяясь.
Большинство общих представлений требуют ключ queryset, который является экземпляром QuerySet; см. Выполнение запросов для получения дополнительной информации об объектах QuerySet.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/3.2/ref/class-based-views/index/