Встроенный 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 объектах.

Copyright ©2021 All rights reserved