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/2.0/ref/class-based-views/index/