Базовые представления
Следующие три класса предоставляют большую часть функциональности, необходимой для создания представлений Django. Можно рассматривать их как родительские представления, которые могут использоваться сами по себе или наследоваться от них. Возможно, они не предоставляют все возможности, необходимые для проектов, в которых используются Mixins и обобщенные представления на основе классов.
Многие встроенные представления Django на основе классов наследуются от других представлений на основе классов или различных миксинов. Поскольку эта цепочка наследования очень важна, родительские классы документированы в разделе с заголовком Предки (порядок разрешения методов). 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атрибуты.При вызове представления во время цикла запроса/ответа метод
setup()присваиваетHttpRequestатрибуту представленияrequest, а любые позиционные и/или ключевые аргументы извлеченные из шаблона URL — атрибутамargsиkwargsсоответственно. Затем вызывается методdispatch().
-
setup(request, *args, **kwargs) -
Выполняет ключевую инициализацию представления перед вызовом
dispatch().При переопределении этого метода необходимо вызвать
super().
-
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.
Предки (порядок разрешения методов)
Это представление наследует методы и атрибуты от следующих представлений:
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).Предки (MRO)
Этот вид наследует методы и атрибуты от следующего вида:
Диаграмма потока метода
Пример 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, ArticleDetailView urlpatterns = [ path('counter/<int:pk>/', ArticleCounterRedirectView.as_view(), name='article-counter'), path('details/<int:pk>/', ArticleDetailView.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 для перенаправления.
Аргументы
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/3.2/ref/class-based-views/base/