РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
291 of 818 menu

Класс View

Класс View является базовым для всех классовых представлений в Django. Он определяет структуру, в которой каждый HTTP-метод (GET, POST и другие) обрабатывается отдельным методом класса. В отличие от функций-представлений, классы позволяют переиспользовать код через наследование и миксины.

Основной метод класса View - это dispatch, который определяет, какой метод вызвать в зависимости от HTTP-метода запроса. Класс принимает объект запроса (HttpRequest) и возвращает объект ответа (HttpResponse или его подкласс).

Синтаксис

from django.views import View from django.http import HttpResponse class MyView(View): def get(self, request, *args, **kwargs): return HttpResponse('GET response') def post(self, request, *args, **kwargs): return HttpResponse('POST response')

Пример

Создадим простое представление, которое обрабатывает GET и POST запросы:

from django.views import View from django.http import HttpResponse class SimpleView(View): def get(self, request, *args, **kwargs): return HttpResponse('This is GET request') def post(self, request, *args, **kwargs): return HttpResponse('This is POST request')

Чтобы использовать это представление в urls.py, нужно вызвать метод as_view:

from django.urls import path from .views import SimpleView urlpatterns = [ path('simple/', SimpleView.as_view(), name='simple_view'), ]

Пример

Внутри метода можно получить аргументы из URL или параметры запроса. Например, обработаем GET параметр name:

from django.views import View from django.http import HttpResponse class GreetingView(View): def get(self, request, *args, **kwargs): name = request.GET.get('name', 'Guest') return HttpResponse(f'Hello, {name}!')

Результат для запроса с параметром ?name=John:

"Hello, John!"

Пример

Класс View можно расширить, добавив свои методы. Например, создадим миксин для проверки аутентификации и используем его:

from django.views import View from django.http import HttpResponse from django.contrib.auth.mixins import LoginRequiredMixin class AuthenticatedView(LoginRequiredMixin, View): def get(self, request, *args, **kwargs): return HttpResponse('You are authenticated!')

Если пользователь не авторизован, Django автоматически перенаправит его на страницу входа (при правильной настройке LOGIN_URL).

Смотрите также

  • метод as_view,
    который преобразует класс во view-функцию
  • метод dispatch,
    который определяет, какой метод вызвать по HTTP-методу
  • метод get,
    который обрабатывает GET запросы
  • метод post,
    который обрабатывает POST запросы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить