Встроенный API представлений на основе классов ¶
Справочник по API представлений на основе классов. Вводный материал см. В руководстве по темам представлений на основе классов .
- Базовые просмотры
- Общие представления дисплея
- Общие представления редактирования
- Общие представления даты
- Примеси представлений на основе классов
- Базовые представления на основе классов - плоский индекс
Спецификация ¶
Каждый запрос, обслуживаемый представлением на основе классов, имеет независимое состояние; следовательно, в экземпляре безопасно хранить переменные состояния (т. е. это поточно-ориентированная операция).self.foo = 3
Представление на основе классов развертывается в шаблоне URL-адреса с помощью
as_view()
метода классов:
urlpatterns = [
path('view/', MyView.as_view(size=42)),
]
Безопасность потоков с аргументами просмотра
Аргументы, передаваемые представлению, используются всеми экземплярами представления. Это означает, что вы не должны использовать список, словарь или любой другой изменяемый объект в качестве аргумента представления. Если вы это сделаете и общий объект будет изменен, действия одного пользователя, посещающего ваше представление, могут повлиять на последующих пользователей, посещающих то же представление.
Переданные аргументы as_view()
будут назначены экземпляру, который используется для обслуживания запроса. Используя предыдущий пример, это означает, что каждый запрос MyView
может использоваться
self.size
. Аргументы должны соответствовать атрибутам, которые уже существуют в классе (возврат True
при hasattr
проверке).
Базовые и общие представления ¶
Представления на основе базовых классов можно рассматривать как родительские представления, которые могут использоваться сами по себе или унаследованы от. Они могут не предоставлять все возможности, необходимые для проектов, и в этом случае существуют миксины, которые расширяют возможности базовых представлений.
Общие представления Django построены на основе этих базовых представлений и были разработаны как ярлык для общих шаблонов использования, таких как отображение деталей объекта. Они берут определенные общие идиомы и шаблоны, найденные при разработке представлений, и абстрагируют их, чтобы вы могли быстро написать общие представления данных, не повторяя себя.
Для большинства общих представлений требуется queryset
ключ, который является QuerySet
экземпляром; см. Выполнение запросов для получения дополнительной информации об QuerySet
объектах.