Spec-Zone.ru › Django 1.10

Базовые представления

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

Многие встроенные в Django представления на основе классов наследуют от других представлений на основе классов или различных миксинов. Поскольку эта цепочка наследования очень важна, родительские классы документированы в разделе Предки (MRO). MRO — это аббревиатура от Method Resolution Order.

View

class django.views.generic.base.View

Базовое представление на основе класса. Все остальные представления на основе классов наследуют от этого базового класса. Это не строго обобщённое представление и поэтому также может быть импортировано из django.views.

Изменено в Django 1.10:

Добавлена возможность импортировать из django.views.

Диаграмма потока методов

  1. dispatch()
  2. http_method_not_allowed()
  3. options()

Пример views.py:

%%%CODE_BLOCK_7%%>

Пример urls.py:

%%%CODE_BLOCK_8%%>

Атрибуты

http_method_names

Список имён HTTP методов, которые будет принимать это представление.

По умолчанию:

%%%CODE_BLOCK_10%%>

Методы

classmethod as_view(**initkwargs)

Возвращает вызываемое представление, которое принимает запрос и возвращает ответ:

%%%CODE_BLOCK_12%%>
Новое в Django 1.9.

Возвращённое представление имеет view_class и view_initkwargs атрибуты.

dispatch(request, *args, **kwargs)

Часть представления, которая принимает аргумент request плюс аргументы и возвращает HTTP ответ.

По умолчанию, обработчик проверит HTTP метод и попытается делегировать обработку методу, соответствующему этому методу; GET будет делегирован get(), POST - post(), и так далее.

По умолчанию, запрос HEAD будет делегирован get(). Если вам нужно обработать запросы HEAD другим способом, чем GET, вы можете переопределить метод head(). Обратитесь к Поддержка других HTTP методов для примера.

http_method_not_allowed(request, *args, **kwargs)

Если представление было вызвано с HTTP методом, который оно не поддерживает, вызывается этот метод вместо него.

По умолчанию, реализация возвращает HttpResponseNotAllowed со списком разрешённых методов в виде простого текста.

options(request, *args, **kwargs)

Обрабатывает ответы на запросы для HTTP метода OPTIONS. Возвращает ответ с заголовком Allow, содержащим список разрешённых HTTP методов представления.

TemplateView

class django.views.generic.base.TemplateView

Отображает заданный шаблон, с контекстом, содержащим параметры, полученные из URL.

Предки (MRO)

Это представление наследует методы и атрибуты от следующих представлений:

  • django.views.generic.base.TemplateResponseMixin
  • django.views.generic.base.ContextMixin
  • django.views.generic.base.View

Диаграмма потока методов

  1. dispatch()
  2. http_method_not_allowed()
  3. get_context_data()

Пример views.py:

%%%CODE_BLOCK_39%%>

Пример urls.py:

%%%CODE_BLOCK_40%%>

Контекст

  • Заполняется (через ContextMixin) ключевыми аргументами, полученными из шаблона URL, который обслужил представление.

RedirectView

class django.views.generic.base.RedirectView

Перенаправляет на заданный URL.

Заданный URL может содержать форматирование строк в стиле словаря, которое будет интерполировано по отношению к параметрам, полученным из URL. Поскольку интерполяция ключевых слов всегда выполняется (даже если аргументы не передаются), все символы "%" в URL должны быть записаны как "%%", чтобы Python преобразовывал их в один символ процента на выходе.

Если заданный URL равен None, Django вернёт HttpResponseGone (410).

Предки (MRO)

Это представление наследует методы и атрибуты от следующего представления:

  • django.views.generic.base.View

Диаграмма потока методов

  1. dispatch()
  2. http_method_not_allowed()
  3. get_redirect_url()

Пример views.py:

%%%CODE_BLOCK_52%%>

Пример urls.py:

%%%CODE_BLOCK_53%%>

Атрибуты

url

URL для перенаправления в виде строки. Или None для поднятия HTTP ошибки 410 (Gone).

pattern_name

Имя шаблона URL для перенаправления. Обращение будет выполнено с теми же аргументами и ключевыми аргументами, что и для этого представления.

permanent

Является ли перенаправление постоянным. Единственное отличие здесь — это возвращаемый HTTP код состояния. Если True, то перенаправление будет использовать код состояния 301. Если False, то перенаправление будет использовать код состояния 302. По умолчанию, permanent равно False.

Изменено в Django 1.9:

Значение по умолчанию атрибута permanent изменилось с True до False.

query_string

Следует ли передавать строку запроса GET в новое местоположение. Если True, то строка запроса добавляется к URL. Если False, то строка запроса отбрасывается. По умолчанию, query_string равно False.

get_redirect_url(*args, **kwargs)

Создаёт целевой URL для перенаправления.

По умолчанию, реализация использует url как начальную строку и выполняет расширение % именованных параметров в этой строке, используя именованные группы, захваченные в URL.

Если url не задано, get_redirect_url() пытается обратить pattern_name с использованием того, что было захвачено в URL (используются как именованные, так и безымянные группы).

Если запрошено query_string, он также добавит строку запроса к сгенерированному URL. Подклассы могут реализовать любое поведение, которое они пожелают, при условии, что метод возвращает URL-строку, готовую для перенаправления.

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

Spec-Zone.ru

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