Что такое представление (view) в Django?

Ответ

В Django представление (view) — это вызываемый объект (функция или класс), который принимает веб-запрос и возвращает веб-ответ. Это ключевой компонент, где определяется бизнес-логика приложения.

Основная задача представления — обработать входящий HttpRequest, выполнить необходимые действия (например, извлечь данные из базы, обработать форму) и сформировать HttpResponse (например, HTML-страницу, JSON-ответ или перенаправление).

Существует два основных типа представлений:

1. Представления-функции (Function-Based Views, FBV) Это простейший вариант, обычная функция Python.

from django.http import HttpResponse
import datetime

def current_datetime(request):
    now = datetime.datetime.now()
    html = f"<html><body>It is now {now}.</body></html>"
    return HttpResponse(html)

2. Представления-классы (Class-Based Views, CBV) Более структурированный и расширяемый подход. Методы класса обрабатывают разные HTTP-методы (get, post и т.д.).

from django.http import HttpResponse
from django.views import View

class MyView(View):
    def get(self, request):
        # Логика для обработки GET-запроса
        return HttpResponse('This is a GET request')

    def post(self, request):
        # Логика для обработки POST-запроса
        return HttpResponse('This is a POST request')

Представления связываются с URL-адресами в файле urls.py:

from django.urls import path
from .views import current_datetime, MyView

urlpatterns = [
    # Для FBV
    path('time/', current_datetime, name='time'),
    # Для CBV используется метод as_view()
    path('my-view/', MyView.as_view(), name='my-view'),
]

Ответ 18+ 🔞

Давай разберём эту хуйню про представления в Джанго, а то народ путается, как мухи в паутине, блядь.

Представление, или view, если по-ихнему — это такая штука, которая сидит на приёме, как баба у подъезда. К ней стучится запрос, она его смотрит, оценивает и либо пускает с ответом, либо посылает нахуй с ошибкой. Вся бизнес-логика, вся движуха твоего сайта — она тут, в этой комнате, где всё и решается.

А решать можно двумя способами, как в жизни: по-простому, на коленке, или с понтами, по всем правилам искусства.

Первый способ — Функции (FBV). Как дед на лавочке: сидит, ждёт, к нему пришли — он ответил. Просто, понятно, без затей.

from django.http import HttpResponse
import datetime

def current_datetime(request):
    now = datetime.datetime.now()
    html = f"<html><body>It is now {now}.</body></html>"
    return HttpResponse(html)

Вот видишь? Функция. Пришёл request — получи html с текущим временем. Всё, пиздец. Никаких тебе наследников, переопределений. Прямолинейно, как удар кирпичом по голове.

Второй способ — Классы (CBV). Это уже не дед, а целая контора с отделами. У каждого отдела своя задача: один отдел по GET запросам работает, другой — по POST. Структурно, модно, молодёжно.

from django.http import HttpResponse
from django.views import View

class MyView(View):
    def get(self, request):
        # Если кто-то просто пришёл посмотреть
        return HttpResponse('This is a GET request')

    def post(self, request):
        # Если кто-то принёс данные, чтобы что-то изменить
        return HttpResponse('This is a POST request')

Красота, да? Не нужно городить кучу if в одной функции. Всё разложено по полочкам. Но, блядь, новички иногда от этого класса охуевают, потому что там под капотом ещё овердохуища магии.

А теперь самое главное — как эту всю красоту привязать к адресу, чтобы браузер знал, куда стучаться. Всё делается в urls.py, это как адресная книга для твоего сайта.

from django.urls import path
from .views import current_datetime, MyView

urlpatterns = [
    # Для простой функции — просто указываешь её имя
    path('time/', current_datetime, name='time'),
    # Для класса — нужно вызвать волшебный метод as_view(), он всё подготовит
    path('my-view/', MyView.as_view(), name='my-view'),
]

Вот и вся магия. Функцию — как есть, класс — через as_view(). Запомни это, как «Отче наш», а то будешь потом ебаться с ошибками, а они тебе скажут: «Чувак, ты забыл as_view() вызвать, пидарас шерстяной».

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