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 основаны на этих базовых представлениях и были разработаны как сокращение для общих паттернов использования, таких как отображение подробностей об объекте. Они берут определённые распространённые идиомы и паттерны, встречающиеся в разработке представлений, и абстрагируют их, так что вы можете быстро написать общие представления данных, не повторяясь.
END_OF_DOCUMENT_MARKERБольшинство общих представлений требуют ключ queryset, который является экземпляром QuerySet; см. Выполнение запросов для получения дополнительной информации об объектах QuerySet.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/3.0/ref/class-based-views/index/