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

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

Большинство представлений на основе классов, встроенных в Django, наследуются от представлений на основе других классов или от разных классов миксинов. Из-за важности этой цепочки наследования родительские классы задокументированы в разделе « Предки » (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() устанавливает атрибут представления 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

Отображает данный шаблон.

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

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

Индекс метода

  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 ).
  • Можно также добавить контекст , используя именованный параметр 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).

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

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

Индекс метода

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

Copyright ©2020 All rights reserved