Модуль 1

Що таке Django і філософія фреймворку

Ось твій урок у стилі CS50 українською мовою.


🎓 CS50 Style: Вступ до Django та філософія "Батарейок у комплекті"

Привіт, друзі! 👋

1. 🔥 Вступ: Чому ми не хочемо писати все з нуля?

Уявіть, що ви вирішили відкрити піцерію. 🍕 У вас є два шляхи:

  1. Шлях "хардкорного інженера": Ви самі вирощуєте пшеницю, самі будуєте піч із глини, самі куєте ножі з металу, і тільки потім — печете піцу.
  2. Шлях "шеф-кухаря": Ви орендуєте професійну кухню, де вже є піч, холодильники, ножі та навіть заготовки тіста. Ви просто приходите і починаєте творити кулінарні шедеври.

У світі веб-розробки Python — це ваша мова спілкування. Але якщо ви почнете писати сайт на "чистому" Python, вам доведеться обробляти мережеві сокети, парсити HTTP-заголовки вручну і писати SQL-запити для кожної коми. Це шлях №1. Це довго, боляче і небезпечно.

Django — це шлях №2. Це та сама професійна кухня.

Виникає питання: Навіщо витрачати час на вивчення цього "монстра", якщо можна написати простий скрипт? А тому, що в реальному світі (Instagram, Pinterest, National Geographic — усі вони використовують Django) нам потрібна швидкість, безпека і масштабованість.

Сьогодні ми розберемося, що це за інструмент і чому розробники кажуть, що у нього "батарейки в комплекті".


2. 🧠 Теоретична база: Що "під капотом"?

Django — це високорівневий веб-фреймворк на Python. Але що це означає?

Фреймворк vs Бібліотека

Це важливо зрозуміти інтуїтивно: * Бібліотека (наприклад, requests або math) — це інструмент. Ви берете молоток і забиваєте цвях. Ви керуєте кодом. * Фреймворк (Django) — це каркас будинку. Ви не можете будувати стіни де завгодно; каркас диктує правила. Код керує вами (у хорошому сенсі). Він каже: "Поклади логіку сюди, а шаблон сюди, і я зроблю все інше".

Філософія MTV (Model - Template - View)

Django використовує архітектуру, яку часто плутають з MVC, але тут вона називається MTV. Давайте уявимо ресторан:

  1. Model (Модель) — це Комірник. Він знає, де лежать продукти (дані) і як їх дістати з холодильника (бази даних). Йому байдуже, як ви це приготуєте, його задача — дати чисті дані.
  2. View (Представлення) — це Офіціант (або Менеджер). Це мозок. Він отримує замовлення від клієнта (URL), каже комірнику (Model) "дай мені помідори", а потім передає їх на кухню.
  3. Template (Шаблон) — це Кухар/Сервіровка. Він бере дані від офіціанта і "красиво розкладає їх на тарілці" (генерує HTML-сторінку), яку побачить клієнт.

❗️ Запам’ятайте: Django розділяє логіку (Python) і зовнішній вигляд (HTML). Це дозволяє змінювати дизайн, не ламаючи роботу сайту.

"Batteries Included" (Батарейки в комплекті)

Це головний девіз Django. Це означає, що вам не треба шукати окремі бібліотеки для: * Адмін-панелі (вона генерується сама! 🤯), * Реєстрації користувачів, * Роботи з базою даних, * Захисту від хакерських атак.

Все це вже є всередині.


3. 🧪 Приклади: Від болю до магії

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

Очікування студента:

Як ви думаєте, як виглядає код, що дістає всіх користувачів з бази даних?

Приклад 1: "Чистий" Python + SQL (Як ми НЕ хочемо робити)

# Багато коду для підключення до БД...
cursor = connection.cursor()
query = "SELECT * FROM users WHERE active = 1;" # А якщо помилився в SQL?
cursor.execute(query)
users = cursor.fetchall()
# Тепер це треба вручну перетворити в об'єкти...

Чому це погано? Це небезпечно (SQL-ін'єкції) і незручно читати.

Приклад 2: Django ORM (Магія ✨)

# Ми просто звертаємось до класу User
users = User.objects.filter(active=True)

Пояснення: Django ORM (Object-Relational Mapping) дозволяє працювати з базою даних як зі звичайними Python-об'єктами. Ви пишете на Python, а Django сам перекладає це в ідеальний SQL.

Приклад 3: Маршрутизація (URL)

Уявіть, що користувач заходить на site.com/blog/my-first-post.

Django (urls.py):

path('blog/<str:slug>/', views.post_detail)

Django бачить цю адресу, розуміє, що <str:slug> — це змінна частина ("my-first-post"), і автоматично передає її у вашу функцію post_detail. Вам не треба парсити рядок вручну!


4. 🛠 Практична частина

Час забруднити руки! Відкривайте термінал.

Завдання 1: Ініціалізація Встановіть Django (якщо ще ні) і створіть проект.

pip install django
django-admin startproject my_kitchen .

(Зверніть увагу на крапку в кінці — вона важлива, щоб не створювати зайву вкладену папку!)

Завдання 2: Розвідка Зайдіть у папку і подивіться на файли. Знайдіть manage.py. * Запустіть сервер: python manage.py runserver * Відкрийте браузер за посиланням, яке вам видав термінал (зазвичай http://127.0.0.1:8000). * Питання: Що ви бачите? (Ви маєте побачити ракету, що злітає 🚀. Це означає, що "кухня" готова).

Завдання 3: "А що, якщо..." Зупиніть сервер (Ctrl+C). Спробуйте видалити файл db.sqlite3 (якщо він вже з'явився). Запустіть сервер знову. * Що сталося? Нічого страшного? * Пояснення: Django побачив, що бази немає, і створить її знову при першій необхідності (але вона буде порожньою).

Завдання 4: Міні-кейс (на папері або в голові) Уявіть, що ми робимо клон Instagram. Розподіліть ролі по MTV: 1. Фотографія котика і кількість лайків. 2. HTML-сторінка, де ця фотка відображається в рамочці. 3. Функція, яка перевіряє, чи має право користувач бачити це фото.

(Відповідь: 1 - Model, 2 - Template, 3 - View)


5. 💡 Мислення як у розробника

Як думає досвідчений Django-розробник?

  1. Don't Reinvent the Wheel (Не винаходь велосипед).
    • Помилка новачка: Писати свою систему скидання паролю.
    • Профі: Гуглить "django password reset" і знаходить готові вбудовані views.
  2. Fat Models, Thin Views (Товсті моделі, худі представлення).
    • Намагайтеся записувати складну логіку даних у Моделі (Chef), а не перевантажувати Офіціанта (View). Нехай офіціант просто носить їжу, а не готує її біля столу.
  3. Читайте документацію.
    • Документація Django — одна з найкращих у світі IT. Це ваша кулінарна книга.

6. 🧩 Підсумок

Сьогодні ми не написали багато коду, але ми зробили дещо важливіше — ми зрозуміли філософію.

Ви тепер знаєте: * Що Django — це не просто бібліотека, а цілий завод (фреймворк). * Як працює тріо MTV (Model-Template-View). * Чому ми любимо ORM (ніякого сирого SQL!). * Як запустити "ракету" локально.

🔜 У наступній серії: Ми змусимо цю ракету летіти туди, куди нам треба! Ми розберемо Routing (Маршрутизацію) і створимо нашу першу власну сторінку "Hello, World", яка буде реагувати на дії користувача.

А поки — спробуйте не зламати manage.py! 😉

До зустрічі! 👨‍💻