Базовые просмотры ¶
Следующие три класса предоставляют большую часть функций, необходимых для создания представлений Django. Вы можете думать о них как о родительских представлениях, которые можно использовать как есть или как родительский класс. Они не содержат всех функций, требуемых проектами, поэтому существуют представления, основанные на классах типов Mixin
и других универсальных шаблонах.
Большинство представлений на основе классов, встроенных в Django, наследуются от представлений на основе других классов или от разных классов миксинов. Из-за важности этой цепочки наследования родительские классы задокументированы в разделе « Предки » (MRO) . MRO - это аббревиатура от Method Resolution Order.
View
¶
-
класс
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()
устанавливает атрибут представленияrequest
для объектаHttpRequest
вместе с любыми позиционными или именованными параметрами, захваченными из шаблона URL-адреса, для атрибутовargs
иkwargs
представления. Затемdispatch()
называется.
-
setup
( запрос , * аргументы , ** kwargs ) ¶ Выполняет инициализацию ключевого вида до
dispatch()
.При переопределении этого метода необходимо вызвать
super()
.
-
dispatch
( запрос , * аргументы , ** kwargs ) ¶ Часть
view
представления, метод, который принимает параметрrequest
и другие параметры и возвращает ответ HTTP.Реализация по умолчанию проверяет метод HTTP и пытается делегировать выполнение методу, который соответствует методу HTTP; запрос
GET
будет делегированаget()
, запросPOST
наpost()
, и так далее.По умолчанию запрос
HEAD
будет делегированget()
. Если вам нужно обрабатывать запросы по-другомуHEAD
, вы можете переопределить методhead()
. См. Пример в разделе Поддержка альтернативных методов HTTP .
-
http_method_not_allowed
( запрос , * аргументы , ** kwargs ) ¶ Если представление было вызвано методом HTTP, который он не поддерживает, будет вызван этот метод.
Реализация по умолчанию возвращается
HttpResponseNotAllowed
со списком разрешенных методов в виде обычного текста.
-
options
( запрос , * аргументы , ** kwargs ) ¶ Обрабатывает ответ на запросы от команды HTTP OPTIONS. Возвращает ответ с заголовком,
Allow
содержащим список имен HTTP-методов, разрешенных для представления.
-
TemplateView
¶
-
класс
django.views.generic.base.
TemplateView
¶ Отображает данный шаблон.
Предки (ТОиР)
Это представление наследует методы и атрибуты следующих представлений:
django.views.generic.base.TemplateResponseMixin
django.views.generic.base.ContextMixin
django.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
). - Можно также добавить контекст , используя именованный параметр
extra_context
вas_view()
.
Не рекомендуется с версии 3.1: Начиная с Django 4.0 аргументы ключевых слов, захваченные из шаблона URL, не будут передаваться в контекст. Ссылайтесь на них с помощью
view.kwargs
.
RedirectView
¶
-
класс
django.views.generic.base.
RedirectView
¶ Перенаправление на указанный URL.
Данный URL-адрес может содержать строки формата словарного типа, которые будут интерполироваться параметрами, зафиксированными в URL-адресе. Поскольку интерполяция ключевых слов выполняется всегда (даже если параметры не фиксируются), любой символ
"%"
в URL-адресе должен быть удвоен ("%%"
), чтобы Python преобразовал эти последовательности в один символ процента при отображении.Если указанный URL
None
равен, Django возвращает ответHttpResponseGone
(410).Предки (ТОиР)
Это представление наследует методы и атрибуты следующего представления:
Индекс метода
Пример файла 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 для перенаправления. Обратное разрешение выполняется с использованием тех же позиционных и именованных параметров (args / kwargs), которые передаются в это представление.
-
permanent
¶ Указывает, должно ли перенаправление быть постоянным. Единственное отличие - это возвращаемый код состояния HTTP. Если
True
при перенаправлении создается код состояния 301. ЕслиFalse
при перенаправлении создается код состояния 302. По умолчаниюpermanent
-False
.
-
query_string
¶ Указывает, следует ли пересылать строку запроса GET в новое расположение. Если
True
, строка запроса добавляется к URL-адресу. ЕслиFalse
, строка запроса не рассматривается. По умолчаниюquery_string
этоFalse
.
методы
-
get_redirect_url
( * аргументы , ** kwargs ) ¶ Создает целевой URL-адрес перенаправления.
Параметры
args
иkwargs
являются соответственно позиционными и именованными параметрами, захваченными из шаблона URL .Реализация по умолчанию использует
url
в качестве начальной строки и выполняет замену именованных параметров%
в этой строке, используя именованные группы, записанные в URL.Если
url
не установлен,get_redirect_url()
попробуйте разрешить,pattern_name
используя элементы, зафиксированные в URL-адресе (как именованные, так и анонимные группы).Если запрос содержал строку параметров
query_string
, эта строка также добавляется к сгенерированному URL-адресу. Подклассы могут реализовывать любое поведение, которое они хотят, если метод возвращает строку URL, готовую для перенаправления.
-