Базовые представления
Следующие три класса предоставляют большую часть функциональности, необходимой для создания представлений Django. Вы можете рассматривать их как родительские представления, которые могут использоваться самостоятельно или наследоваться от них. Они могут не предоставлять всех возможностей, необходимых для проектов, в этом случае используются Mixins и обобщенные представления на основе классов.
Многие встроенные представления Django на основе классов наследуются от других представлений на основе классов или различных mixins. Поскольку эта цепочка наследования очень важна, классы-предшественники документированы в разделе Предки (Порядок разрешения методов). MRO — это аббревиатура от Method Resolution Order (Порядок разрешения методов).
View
-
class django.views.generic.base.View -
Основной класс-представление на основе класса. Все остальные представления на основе класса наследуются от этого базового класса. Это не строго обобщенное представление, и поэтому его также можно импортировать из
django.views.Диаграмма потока методов
Пример views.py:
from django.http import HttpResponse from django.views import View class MyView(View): def get(self, request, *args, **kwargs): return HttpResponse('Hello, World!')Пример urls.py:
from django.urls import path from myapp.views import MyView urlpatterns = [ path('mine/', MyView.as_view(), name='my-view'), ]Атрибуты
-
http_method_names -
Список имён HTTP-методов, которые будет принимать это представление.
По умолчанию:
['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
Методы
-
classmethod as_view(**initkwargs) -
Возвращает вызываемое представление, которое принимает запрос и возвращает ответ:
response = MyView.as_view()(request)
Возвращаемое представление имеет атрибуты
view_classиview_initkwargs.Когда представление вызывается во время цикла запрос/ответ,
HttpRequestприсваивается атрибуту представленияrequest. Любые позиционные и/или именованные аргументы полученные из шаблона URL присваиваются атрибутамargsиkwargsсоответственно. Затем вызываетсяdispatch().
-
dispatch(request, *args, **kwargs) -
Часть представления, которая принимает аргумент типа
requestи аргументы, и возвращает HTTP-ответ.Реализация по умолчанию проверит 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.
Предки (Порядок разрешения методов)
Это представление наследует методы и атрибуты от следующих представлений:
django.views.generic.base.TemplateResponseMixindjango.views.generic.base.ContextMixindjango.views.generic.base.View
Диаграмма потока методов
Пример views.py:
from django.views.generic.base import TemplateView from articles.models import Article class HomePageView(TemplateView): template_name = "home.html" def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['latest_articles'] = Article.objects.all()[:5] return contextПример urls.py:
from django.urls import path from myapp.views import HomePageView urlpatterns = [ path('', HomePageView.as_view(), name='home'), ]Контекст
- Заполняется (через
ContextMixin) именованными аргументами, полученными из шаблона URL, обслужившего представление. - Вы также можете добавить контекст, используя именованный аргумент
extra_contextдляas_view().
RedirectView
-
class django.views.generic.base.RedirectView -
Перенаправляет на заданный URL.
Заданный URL может содержать форматирование строк в стиле словаря, которое будет интерполировано относительно параметров, полученных из URL. Поскольку интерполяция именованных параметров всегда выполняется (даже если аргументы не переданы), все символы
"%"в URL должны быть записаны как"%%", чтобы Python преобразовал их в один символ процента на выходе.Если заданный URL равен
None, Django вернёт ответHttpResponseGone(410).Предки (Порядок разрешения методов)
Это представление наследует методы и атрибуты от следующего представления:
Диаграмма потока методов
Пример views.py:
from django.shortcuts import get_object_or_404 from django.views.generic.base import RedirectView from articles.models import Article class ArticleCounterRedirectView(RedirectView): permanent = False query_string = True pattern_name = 'article-detail' def get_redirect_url(self, *args, **kwargs): article = get_object_or_404(Article, pk=kwargs['pk']) article.update_counter() return super().get_redirect_url(*args, **kwargs)Пример urls.py:
from django.urls import path from django.views.generic.base import RedirectView from article.views import ArticleCounterRedirectView, ArticleDetail urlpatterns = [ path('counter/<int:pk>/', ArticleCounterRedirectView.as_view(), name='article-counter'), path('details/<int:pk>/', ArticleDetail.as_view(), name='article-detail'), path('go-to-django/', RedirectView.as_view(url='https://djangoproject.com'), name='go-to-django'), ]Атрибуты
-
url -
URL для перенаправления, как строка. Или
Noneдля поднятия HTTP-ошибки 410 (Gone).
-
pattern_name -
Имя шаблона URL для перенаправления. Обращение будет выполнено с теми же аргументами и ключевыми словами, которые передаются для этого представления.
-
permanent -
Является ли перенаправление постоянным. Единственное различие здесь — возвращаемый HTTP-код состояния. Если
True, то перенаправление будет использовать код состояния 301. ЕслиFalse, то перенаправление будет использовать код состояния 302. По умолчаниюpermanentравно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/2.0/ref/class-based-views/base/