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.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/2.1/ref/class-based-views/index/