Класс 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).