API встроенных представлений на основе классов
Справочник по API представлений на основе классов. Для ознакомления обратитесь к руководству по теме Представления на основе классов.
- Базовые представления
- Представления для общего отображения
- Представления для общего редактирования
- Представления на основе даты
- Миксины представлений на основе классов
- Упрощённый индекс представлений Django на основе классов
Спецификация
Каждый запрос, обслуживаемый представлением на основе класса, имеет независимое состояние; поэтому безопасен при хранении переменных состояния в экземпляре (то есть 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.1/ref/class-based-views/index/