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