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

Справочник по API для представлений на основе классов. Для введения в эту концепцию см. Руководство по теме Class-Based Views .

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

Каждый запрос, обслуживаемый представлением на основе классов, имеет независимое состояние; поэтому можно хранить переменные состояния в экземпляре представления (например, учитывает параллелизм между потоками выполнения).self.foo = 3

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

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

Параллелизм во время выполнения для параметров просмотра

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

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

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

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

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

Большинству общих представлений нужен ключ, queryset являющийся экземпляром QuerySet . См. Создание запросов для получения дополнительной информации об объектах QuerySet .

Copyright ©2020 All rights reserved