Базовые представления
Следующие три класса предоставляют большую часть функциональности, необходимой для создания представлений Django. Вы можете рассматривать их как родительские представления, которые могут использоваться сами по себе или наследоваться от них. Они могут не предоставлять всех необходимых возможностей для проектов, в которых случае используются миксины и основанные на классах обобщенные представления.
Многие встроенные представления Django на основе классов наследуются от других представлений на основе классов или различных миксинов. Поскольку эта цепочка наследования очень важна, родительские классы документированы в разделе Предки (MRO). 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().Если подкласс
Viewопределяет обработчики асинхронных (async def) методов,as_view()отметит возвращаемую вызываемую функцию как корутину. ИсключениеImproperlyConfiguredбудет поднято, если асинхронные (async def) и синхронные (def) обработчики определены в одном классе представления.
-
setup(request, *args, **kwargs) -
Выполняет ключевую инициализацию представления перед вызовом
dispatch().При переопределении этого метода необходимо вызвать
super().
-
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-методов представления.Если обработчики других HTTP-методов в классе асинхронны (
async def) то ответ будет обернут в корутинную функцию для использования сawait.
-
TemplateView
-
class django.views.generic.base.TemplateView -
Отображает заданный шаблон, при этом контекст содержит параметры, извлеченные из URL.
Предки (MRO)
Это представление наследует методы и атрибуты от следующих представлений:
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://www.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/5.0/ref/class-based-views/base/