Базовые представления
Следующие три класса предоставляют большую часть функциональности, необходимой для создания представлений Django. Вы можете рассматривать их как родительские представления, которые могут использоваться сами по себе или наследоваться от них. Они могут не предоставлять всех необходимых возможностей для проектов, в которых случае существуют Mixins и обобщенные представления на основе классов.
Многие встроенные представления Django на основе классов наследуются от других представлений на основе классов или различных mixins. Поскольку эта цепочка наследования очень важна, родительские классы документированы в разделе с заголовком Предки (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().Присваивает
HttpRequestатрибуту представленияrequest, а любые позиционные и/или ключевые аргументы полученные из шаблона URL соответственно атрибутамargsиkwargs.При переопределении этого метода необходимо вызвать
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-методов представления.Если обработчики других 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.2/ref/class-based-views/base/