Модуль 5

Створення та реєстрація Django-додатків

Ось готовий урок, створений спеціально за твоїм майстер-промптом.


🎓 CS50-style: Створення та реєстрація Django-додатків

Привіт, друзі! Це CS50... тобто, це курс Django, і сьогодні ми розберемося з фундаментом архітектури вашого майбутнього веб-сервісу.


1. 🔥 Вступ: Хаос у шафі та принцип "Lego"

Уявіть, що ви вирішили побудувати будинок. Не просто халабуду, а справжній хмарочос. Ви ж не будете звалювати цеглу, вікна, сантехніку, меблі та електричні дроти в одну величезну купу посеред кімнати, сподіваючись, що з цього вийде щось путнє?

Звісно, ні. У вас є окремо кухня, окремо спальня, окремо ванна кімната. Кожна кімната має свою чітку функцію.

А тепер подивіться на код. Уявіть, що ви пишете "Наступний Facebook". У вас є код для реєстрації користувачів, код для стрічки новин, код для чату, код для реклами... Якщо ви скинете все це в один файл або одну папку — це буде програмістське пекло. Зламався чат? Ви лізете лагодити й випадково ламаєте реєстрацію.

Риторичне запитання: Ви хочете витрачати вихідні на пошук помилки у файлі на 10,000 рядків, чи хочете мати чітку структуру, де все розкладено по поличках?

У Django цю проблему вирішують Apps (Додатки). Django-проєкт — це ваш "будинок" (або коробка з Lego). А Django-додатки — це "кімнати" (або окремі кубики Lego), з яких ви цей будинок будуєте.

Без розуміння цього ви не напишете нічого складнішого за "Hello World". Тож поїхали розбиратися!


2. 🧠 Теоретична база: Проєкт vs Додаток

Давайте раз і назавжди розберемося з термінологією. Це плутають 90% новачків.

📌 Визначення

  1. Проєкт (Project): Це глобальна конфігурація. Це як материнська плата комп'ютера або фундамент будинку. Тут лежать налаштування (settings.py), маршрутизація всього сайту (urls.py) і скрипт управління (manage.py).
  2. Додаток (App): Це конкретний функціонал. Це як відеокарта або кухня. Додаток робить щось одне, але добре: блог, форум, опитування, магазин.

Як це працює "під капотом"?

Коли ви створюєте додаток командою, Django просто генерує папку зі стандартним набором файлів (views.py, models.py тощо). Але! Сам факт створення папки нічого не означає для Django.

Уявіть, що ви купили нову мікрохвильовку і принесли її додому (створили додаток). Чи може вона працювати? Ні, поки ви не увімкнете її в розетку. У Django "розетка" — це список INSTALLED_APPS у файлі settings.py. Поки ви не додасте туди назву вашого додатка, Django буде ігнорувати його існування.

Що треба запам’ятати залізно:

startapp створює файли. INSTALLED_APPS реєструє їх у проєкті. Без другого кроку перший не має сенсу.


3. 🧪 Приклади: Від простого до реального

Крок 1: Створення (The "Magic" Command)

Припустімо, ми робимо сайт для бібліотеки. Нам потрібен розділ з книгами. Ми відкриваємо термінал. Що ми очікуємо зробити? Сказати Django: "Створи мені заготовку для каталогу".

python manage.py startapp catalog

Що сталося? У вашій папці з'явилася директорія catalog/. Всередині неї: * models.py — тут будемо описувати книги. * views.py — тут логіка (що показувати). * apps.py — конфігурація самого додатка. * tests.py — для тестів.

Це просто файли. Django-проєкт ще "сліпий" щодо них.


Крок 2: Реєстрація (Вмикаємо в розетку)

Йдемо у файл налаштувань проєкту: settings.py. Шукаємо список INSTALLED_APPS.

Як це виглядає зараз:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    ...
]

Що треба зробити: Додати наш catalog.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    ...
    'catalog',  # <--- Ось ми "ввімкнули" наш додаток!
]

Примітка: Іноді ви побачите запис 'catalog.apps.CatalogConfig'. Це більш точний спосіб, але для початку просто назва папки 'catalog' теж працює.


Крок 3: Реальний сценарій (Масштабування)

Уявіть, що бібліотека розрослася. Тепер нам потрібна система новин і форум для читачів. Як би це робив новачок? Почав би пхати код новин у папку catalog. Як це робимо ми (в стилі CS50)?

  1. python manage.py startapp news
  2. python manage.py startapp forum

І реєструємо їх:

INSTALLED_APPS = [
    ...
    'catalog',
    'news',
    'forum',
]

Тепер, якщо форум зламається, каталог книг продовжить працювати ідеально. Це і є ізоляція.


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

Час забруднити руки кодом! Виконайте ці завдання по черзі.

Завдання 1: Hello App Створіть новий Django-проєкт (якщо немає). Створіть додаток з назвою pages (для статичних сторінок типу "Про нас").

Завдання 2: Реєстрація Зареєструйте додаток pages у settings.py. Перевірка: Запустіть сервер (python manage.py runserver). Якщо помилок немає — ви молодець.

Завдання 3: Саботаж (Виправ помилку) Спеціально зробіть помилку в назві в INSTALLED_APPS (наприклад, напишіть 'pagess' замість 'pages'). Запустіть сервер. Прочитайте помилку ModuleNotFoundError. Запам’ятайте її! Саме так Django кричить: "Я не можу знайти те, що ти просиш підключити!". Виправте помилку.

Завдання 4: Міні-кейс "Інтернет-магазин" Уявіть, що ви архітектор Amazon. Які додатки ви б створили? Напишіть на листку (або створіть в терміналі) мінімум 3 додатки для магазину. (Підказка: товари, кошик, користувачі, оплата).

Завдання 5: А що, якщо... Що буде, якщо ви створите додаток, напишете в ньому код, але забудете додати його в INSTALLED_APPS? Відповідь: Python код буде існувати, але Django не зможе створити таблиці в базі даних для цього додатка (команди migrate його ігноруватимуть).


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

Як відрізнити код джуніора від коду сеньйора на цьому етапі?

🚫 Типова помилка новачка: "God App"

Створення одного додатка з назвою main або core і запипихання туди всього: і товарів, і блогу, і чату. Чому це погано: Це вбиває ідею Django. Ви не зможете потім взяти свій "блог" і перенести його в інший проєкт.

🧠 Як думає профі: "Reusable Apps" (Багаторазові додатки)

Досвідчений розробник думає так: "Я зараз напишу додаток reviews (відгуки). Якщо я зроблю його незалежним, то в наступному проєкті я просто скопіюю цю папку, підключу в INSTALLED_APPS і зекономлю собі 5 годин роботи".

Поради з практики:

  1. Назви: Використовуйте іменники у множині або однині, але будьте послідовними (найчастіше — polls, blog, users).
  2. Розмір: Якщо models.py у вашому додатку став занадто великим (сотні рядків), можливо, час розділити цей додаток на два.
  3. Кома: Завжди ставте кому в кінці списків Python, навіть після останнього елемента в INSTALLED_APPS. Це вбереже вас від дурних помилок при додаванні нових рядків.

6. 🧩 Підсумок

Отже, що ми сьогодні зробили? 1. Ми зрозуміли, що Проєкт — це будинок, а Додатки — це кімнати. 2. Ми навчилися створювати додатки командою startapp. 3. Ми навчилися "вмикати" їх через INSTALLED_APPS. 4. Ми зрозуміли, навіщо потрібна модульність (щоб не збожеволіти).

Тепер ви вмієте: Закладати правильну архітектуру свого веб-сервісу.

Що далі? У нас є порожні "кімнати" (додатки). Але вони порожні! На наступному уроці ми завеземо туди "меблі" — ми навчимося створювати Моделі (Models), щоб зберігати дані в базі. Це буде магія!

А поки — Happy Coding! 🚀