JavaRush /Курси /Модуль 3: Django /Вступ до представлень (views)

Вступ до представлень (views)

Модуль 3: Django
Рівень 3 , Лекція 0
Відкрита

Представлення в Django — це серце вашого веб-додатка. Вони обробляють запити користувачів (наприклад, переходи за URL-адресами) та повертають відповіді: HTML-сторінки, JSON, текстові дані та багато іншого. Без представлень ваш додаток був би просто набором статичних файлів.

Уявіть ресторан: клієнт робить замовлення, шеф-кухар готує страву, офіціант приносить її клієнту. У Django представлення — це шеф-кухар. Воно приймає замовлення (запит), підбирає потрібні інгредієнти (дані) і подає клієнту (браузеру) готову страву (відповідь).

Django частково дотримується принципу MVC (Model-View-Controller), тільки ось тут "V" (View) більше нагадує "Controller" із класичного MVC. Грубо кажучи, представлення відповідає за логіку обробки запиту: воно вирішує, що показати користувачу, отримавши цей запит.

Роль представлення в процесі обробки запитів

Давай розглянемо базовий цикл обробки запиту:

  1. Користувач відкриває URL-адресу (наприклад, http://localhost:8000/home).
  2. Django визначає, який обробник запиту відповідає цьому URL (використовуючи маршрути у urls.py).
  3. Обробник запиту (наш view) виконує свою логіку. Наприклад:
    • Підтягує дані з бази даних.
    • Виконує якусь обчислювальну логіку.
    • Формує відповідь (наприклад, HTML-сторінку або JSON), яка буде відправлена користувачу.

Серверна та клієнтська частини

Щоб уникнути плутанини, уточнимо: в Django ми працюємо на серверній стороні додатку. Ми створюємо представлення, які обробляють запити та надсилають готовий результат браузеру. Клієнтська частина — це те, що користувач бачить і з чим взаємодіє (HTML, CSS, JavaScript).

Типи представлень у Django

Функціональні представлення (Function-Based Views, FBV)

Це найпростіший і широко використовуваний тип представлень. Як випливає з назви, це просто Python-функція, яка приймає об'єкт запиту (зазвичай request) і повертає об'єкт відповіді (HttpResponse). Ви легко можете створити найпростіше представлення, яке поверне рядок, JSON або навіть файл.

Перевага FBV — простота. З іншого боку, зі зростанням складності проєкту такі представлення можуть ставати громіздкими.

Приклад функціонального представлення (FBV):

from django.http import HttpResponse

def hello_world(request):
    return HttpResponse("Привіт, Світ!")

Представлення на основі класів (Class-Based Views, CBV)

У Django є витончене рішення для організації коду представлень — класи замість функцій. Такі представлення називаються Class-Based Views (CBV). Вони дозволяють:

  • Структурувати код логічніше
  • Успадковувати та розширювати функціональність
  • Повторно використовувати спільні частини

А найприємніше — Django вже підготував набір готових класів (generic CBV) для типових задач. Хочете показати список записів? Є готовий клас. Потрібно створити форму? І для цього є клас. Усі CRUD-операції (створення, читання, оновлення, видалення) вже реалізовані в цих класах.

Приклад простого CBV:

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

class HelloWorldView(View):
    def get(self, request):
        return HttpResponse("Привіт від CBV!")

FBV чи CBV? Коли що використовувати?

  • FBV чудово підходять для невеликих і простих задач. Якщо ваше представлення виводить статичну сторінку або результат якоїсь простої дії, FBV — ваш вибір.
  • CBV краще використовувати для задач, які потребують складної логіки, багаторазового використання однієї і тієї ж структури або успадкування.

Приклад із життя: FBV — це як однорядкове повідомлення в чаті: швидко, просто, ефективно. А CBV — це як довгий лист або звіт: потрібно більше структури, щоб не заплутатися.

Структура простого функціонального представлення

Давайте подивимось, як виглядає мінімалістичне представлення:

from django.http import HttpResponse

def my_view(request):
    return HttpResponse("Це моя перша HTTP-відповідь!")

Розбір коду:

  1. Імпорт HttpResponse: цей клас використовується для формування простих текстових (або HTML) відповідей.
  2. Функція my_view: кожна функція-представлення приймає як мінімум один аргумент — об'єкт запиту request.
  3. Повернення відповіді: метод повертає об'єкт HttpResponse, який і відправляється клієнту (наприклад, браузеру).

Щоб це запрацювало, потрібно зв'язати представлення з якимось URL. Поки що не хвилюйтесь про це — ми розглянемо маршрутизацію трохи пізніше.

Приклад простого представлення

Створимо просту сторінку "Про нас". Ось мінімальний робочий приклад:

from django.http import HttpResponse

def about_view(request):
    html = """
        <html>
            <head><title>Про нас</title></head>
            <body>
                <h1>Привіт! Це сторінка "Про нас".</h1>
                <p>Ми любимо писати код!</p>
            </body>
        </html>
    """
    return HttpResponse(html)

Це представлення вже вміє віддавати HTML-сторінку, але поки до нього не можна звернутись — як до дому без адреси. У наступному розділі ми налаштуємо маршрути (URLs) і оживимо наше представлення.

Шаблони замість "жорсткого" HTML

Рендерити сирий HTML через HttpResponse — не найкраща практика. У наступних лекціях ви дізнаєтесь, як використовувати систему шаблонів Django, яка дозволить відокремити логіку додатка від користувацького інтерфейсу. Але для розуміння принципів роботи представлень поки що цього цілком достатньо.

На наступному занятті ми приступимо до створення перших представлень!

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ