Spec-Zone.ru › Django 4.1

Смеси для единичных объектов

SingleObjectMixin

class django.views.generic.detail.SingleObjectMixin

Предоставляет механизм для поиска объекта, связанного с текущим HTTP-запросом.

Методы и атрибуты

model

Модель, для которой этот вид отобразит данные. Указание model = Foo по существу равно указанию queryset = Foo.objects.all(), где objects обозначает стандартный менеджер модели Foo.

queryset

Объект QuerySet, представляющий объекты. Если предоставлено, значение queryset имеет приоритет над значением, указанным для model.

Предупреждение

queryset — это атрибут класса с изменяемым значением, поэтому необходимо соблюдать осторожность при его непосредственном использовании. Перед использованием вызовите его метод all() или получите его с помощью get_queryset(), который позаботится о клонировании за кулисами.

slug_field

Имя поля в модели, содержащего slug. По умолчанию, slug_field — 'slug'.

slug_url_kwarg

Имя ключевого аргумента URLConf, содержащего slug. По умолчанию, slug_url_kwarg — 'slug'.

pk_url_kwarg

Имя ключевого аргумента URLConf, содержащего первичный ключ. По умолчанию, pk_url_kwarg — 'pk'.

context_object_name

Определяет имя переменной для использования в контексте.

query_pk_and_slug

Если True, заставляет get_object() выполнять поиск с использованием и первичного ключа, и slug. По умолчанию False.

Этот атрибут может помочь смягчить атаки типа «небезопасная прямая ссылка на объект» (https://wiki.owasp.org/index.php/Top_10_2013-A4-Insecure_Direct_Object_References). Когда приложения позволяют доступ к отдельным объектам по последовательному первичному ключу, злоумышленник может перебрать все URL-адреса; тем самым получив список всех объектов в приложении. Если пользователям, имеющим доступ к отдельным объектам, следует запретить получение этого списка, установка query_pk_and_slug на True поможет предотвратить подбор URL-адресов, так как каждый URL-адрес потребует двух корректных, не последовательных аргументов. Использование уникального slug может служить той же цели, но эта схема позволяет иметь не уникальные slug.

get_object(queryset=None)

Возвращает единственный объект, который этот вид отобразит. Если queryset предоставлен, этот get_queryset() будет использован в качестве источника объектов; в противном случае будет использован get_object(). Этот метод ищет аргумент pk_url_kwarg в аргументах представления; если этот аргумент найден, этот метод выполняет поиск по первичному ключу, используя это значение. Если этот аргумент не найден, он ищет аргумент slug_url_kwarg и выполняет поиск по slug, используя slug_field.

Когда query_pk_and_slug равно True, get_object() выполнит поиск, используя как первичный ключ, так и slug.

get_queryset()

Возвращает get_queryset(), который будет использован для получения объекта, который этот вид отобразит. По умолчанию queryset возвращает значение атрибута QuerySet, если он задан; в противном случае он строит all() путём вызова метода model на стандартном менеджере атрибута model.

get_context_object_name(obj)

Возвращает имя переменной контекста, которое будет использоваться для хранения данных, которые обрабатывает этот вид. Если context_object_name не задан, имя контекста будет построено из имени модели, из которой составлен model_name. Например, модель Article будет иметь имя переменной контекста 'article'.

get_context_data(**kwargs)

Возвращает данные контекста для отображения объекта.

Базовая реализация этого метода требует, чтобы атрибут self.object был установлен представлением (даже если None). Не забудьте сделать это, если вы используете этот миксин без одного из встроенных представлений, которые это делают.

Он возвращает словарь с таким содержимым:

  • object: Объект, который отображает этот вид (self.object).
  • context_object_name: self.object также будет сохранён под именем, возвращённым get_context_object_name(), которое по умолчанию является нижним регистром имени модели.

Переменные контекста перезаписывают значения из процессоров контекста шаблона

Любые переменные из get_context_data() имеют приоритет над переменными контекста из процессоров контекста. Например, если ваше представление устанавливает атрибут model на User, имя переменной контекста по умолчанию user перекроет переменную user из процессора контекста django.contrib.auth.context_processors.auth(). Используйте get_context_object_name(), чтобы избежать конфликта.

get_slug_field()

Возвращает имя поля slug, которое будет использоваться для поиска по slug. По умолчанию, это возвращает значение slug_field.

SingleObjectTemplateResponseMixin

class django.views.generic.detail.SingleObjectTemplateResponseMixin

Смешанный класс, выполняющий рендеринг ответа на основе шаблона для представлений, работающих с единственным объектом. Требует, чтобы представление, с которым он смешан, предоставило self.object, экземпляр объекта, на котором работает представление. self.object обычно, но необязательно, является экземпляром модели Django. Он может быть None если представление находится в процессе создания нового экземпляра.

Расширяет

  • TemplateResponseMixin

Методы и атрибуты

template_name_field

Поле в текущем экземпляре объекта, которое можно использовать для определения имени кандидата шаблона. Если само template_name_field или значение template_name_field в текущем экземпляре объекта является None, объект не будет использоваться для имени кандидата шаблона.

template_name_suffix

Суффикс, добавляемый к автоматически сгенерированному имени кандидата шаблона. Значение по умолчанию — _detail.

get_template_names()

Возвращает список имен кандидатских шаблонов. Возвращает следующий список:

  • значение template_name в представлении (если указано)
  • содержимое поля template_name_field в экземпляре объекта, на котором работает представление (если доступно)
  • <app_label>/<model_name><template_name_suffix>.html

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/4.1/ref/class-based-views/mixins-single-object/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API