Базовые просмотры ¶
Следующие три класса предоставляют большую часть функций, необходимых для создания представлений Django. Вы можете думать о них как о родительских представлениях, которые могут использоваться сами по себе или унаследованы от них. Они могут не предоставлять все возможности, необходимые для проектов, и в этом случае существуют миксины и общие представления на основе классов.
Многие из встроенных в Django представлений на основе классов наследуются от других представлений на основе классов или различных миксинов. Поскольку эта цепочка наследования очень важна, классы-предки задокументированы под заголовком раздела Ancestors (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()
метод назначаетHttpRequest
для отображения видаrequest
атрибута, а также любые позиционные и / или ключевых аргументы захваченных из шаблона URL кargs
иkwargs
атрибутам, соответственно. Потомdispatch()
называется.
-
setup
( запрос , * аргументы , ** kwargs ) ¶ Выполняет инициализацию ключевого вида до
dispatch()
.При переопределении этого метода необходимо вызвать
super()
.
-
dispatch
( запрос , * аргументы , ** kwargs ) ¶ view
Часть зрения - метод , который принимаетrequest
аргумент плюс аргументы, и возвращает ответ HTTP.Реализация по умолчанию будет проверять метод HTTP и пытаться делегировать метод, который соответствует методу HTTP;
GET
будут делегированыget()
,POST
кpost()
, и так далее.По умолчанию
HEAD
запрос будет делегированget()
. Если вам нужно обрабатыватьHEAD
запросы иначе, чемGET
, вы можете переопределитьhead()
метод. См. Пример в разделе Поддержка других методов HTTP .
-
http_method_not_allowed
( запрос , * аргументы , ** kwargs ) ¶ Если представление было вызвано с помощью метода HTTP, который он не поддерживает, вместо этого вызывается этот метод.
Реализация по умолчанию возвращается
HttpResponseNotAllowed
со списком разрешенных методов в виде обычного текста.
-
options
( запрос , * аргументы , ** kwargs ) ¶ Обрабатывает ответы на запросы HTTP-команды OPTIONS. Возвращает ответ с
Allow
заголовком, содержащим список разрешенных имён HTTP-методов представления.
-
TemplateView
¶
-
класс
django.views.generic.base.
TemplateView
¶ Отображает заданный шаблон с контекстом, содержащим параметры, зафиксированные в URL-адресе.
Предки (ТОиР)
Это представление наследует методы и атрибуты следующих представлений:
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
) ключевыми аргументами, полученными из шаблона URL, обслуживающего представление. - Вы также можете добавить контекст, используя
extra_context
аргумент ключевого слова дляas_view()
.
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, 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://djangoproject.com'), name='go-to-django'), ]
Атрибуты
-
url
¶ URL-адрес для перенаправления в виде строки. Или
None
вызвать ошибку HTTP 410 (Gone).
-
pattern_name
¶ Имя шаблона URL для перенаправления. Реверсирование будет выполнено с использованием тех же аргументов и 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-адреса, готовую к перенаправлению.
-