Базовые просмотры

Следующие три класса предоставляют большую часть функций, необходимых для создания представлений Django. Вы можете думать о них как о родительских представлениях, которые могут использоваться сами по себе или унаследованы от них. Они могут не предоставлять все возможности, необходимые для проектов, и в этом случае существуют миксины и общие представления на основе классов.

Многие из встроенных в Django представлений на основе классов наследуются от других представлений на основе классов или различных миксинов. Поскольку эта цепочка наследования очень важна, классы-предки задокументированы под заголовком раздела Ancestors (MRO) . MRO - это аббревиатура от Method Resolution Order.

View

класс django.views.generic.base.View

Базовый вид на основе мастер-класса. Все остальные представления на основе классов наследуются от этого базового класса. Это не строго общий вид, поэтому его также можно импортировать из django.views.

Блок-схема метода

  1. setup()
  2. dispatch()
  3. http_method_not_allowed()
  4. options()

Пример 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']

Методы

classmethodas_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-адресе.

Предки (ТОиР)

Это представление наследует методы и атрибуты следующих представлений:

Блок-схема метода

  1. setup()
  2. dispatch()
  3. http_method_not_allowed()
  4. get_context_data()

Пример 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).

Предки (ТОиР)

Это представление наследует методы и атрибуты из следующего представления:

Блок-схема метода

  1. setup()
  2. dispatch()
  3. http_method_not_allowed()
  4. get_redirect_url()

Пример 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-адреса, готовую к перенаправлению.

Copyright ©2021 All rights reserved