Базовые представления
Следующие три класса обеспечивают большую часть функциональности, необходимой для создания представлений 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().
-
setup(request, *args, **kwargs) -
Новая функция в Django 2.2.
Инициализирует атрибуты экземпляра представления:
self.request,self.args, иself.kwargsперед вызовомdispatch().Переопределение этого метода позволяет миксинам настроить атрибуты экземпляра для повторного использования в дочерних классах. При переопределении этого метода необходимо вызвать
super().
-
dispatch(request, *args, **kwargs) -
Часть представления, которая обрабатывает
viewаргумент плюс дополнительные аргументы и возвращает 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, 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 для перенаправления.
Аргументы
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.0/ref/class-based-views/base/