Модуль 4

Структура Django-проєкту

Це чудова ідея! Девід Малан — майстер пояснювати складні концепції так, що хочеться слухати ще.

Ось урок на тему «Структура Django-проєкту», написаний у його стилі: енергійному, доступному та з фокусом на розуміння «навіщо».


🎓 CS50: Веб-розробка з Python та Django

Тема: Анатомія Django-проєкту 🏗️


1. 🔥 Вступ: Хаос проти Порядку

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

А тепер уявіть, що все це знаходиться в одній великій кімнаті.

Кухар ріже цибулю на столі бухгалтера. Офіціант намагається пробити чек на плиті. Клієнти сидять на ящиках з картоплею. Це хаос. Це не масштабується. Якщо ви захочете відкрити другий ресторан, ви не зможете просто скопіювати цю купу-малу.

В програмуванні це називається "Spaghetti code" — коли все переплутано.

Але Django пропонує нам інший підхід. Він діє як досвідчений архітектор. Коли ви кажете Django: "Створи мені проєкт", він не просто дає вам чистий аркуш паперу. Він будує для вас каркас будівлі з чітко розписаними кімнатами.

Чому це важливо? Тому що 90% часу розробника йде не на написання коду, а на його читання та підтримку. Якщо ви знаєте, де що лежить, ви керуєте проєктом. Якщо ні — проєкт керує вами.

Сьогодні ми заглянемо під капот Django і розберемося: з чого складається цей фреймворк і де саме ми будемо писати наш код?


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

Перш ніж ми відкриємо термінал, нам треба зрозуміти одну фундаментальну відмінність, яку плутають усі новачки.

У Django є два поняття: 1. Проєкт (Project) 2. Додаток (App)

Звучить схоже? Давайте розберемося.

🏢 Аналогія: Торговий Центр

  • Проєкт — це вся будівля ТРЦ "Global Web". У ній є загальна охорона, загальна система опалення, загальна адреса на карті. Це — конфігурація вашого сайту.
  • Додатки (Apps) — це окремі магазини всередині ТРЦ: "Кінотеатр", "Супермаркет", "Магазин одягу". Кожен з них робить щось своє.

У Django-світі: * Ваш сайт (наприклад, Facebook) — це Проєкт. * Стрічка новин, Месенджер, Групи, Маркетплейс — це окремі Додатки (Apps) всередині цього проєкту.

🗂 Файлова структура (Анатомія)

Коли ми запускаємо команду створення проєкту, Django генерує кілька файлів. Давайте подивимося на них, як на органи живого організму:

  1. manage.py 🕹️
    • Це ваш пульт керування. Ви не пишете тут код. Ви використовуєте цей файл, щоб віддавати команди: "Запусти сервер", "Створи базу даних", "Створи нового користувача".
  2. settings.py ⚙️
    • Серце і мозок. Тут записано все: якою мовою сайт, де лежить база даних, які "магазини" (apps) встановлені в нашому ТРЦ.
  3. urls.py 🚦
    • Диспетчер (Ресепшн). Коли користувач вводить адресу google.com/maps, саме цей файл вирішує, куди направити запит — у відділ "Карт" чи у відділ "Пошуку".
  4. wsgi.py / asgi.py 🔌
    • Це двері в інтернет. Через ці файли ваш Python-код спілкується з веб-сервером (наприклад, Nginx або Apache). Вам рідко доведеться їх чіпати, але знати про них треба.

3. 🧪 Приклади: Від порожнечі до структури

Давайте перейдемо до коду. Що ви очікуєте побачити, якщо ми створимо новий проєкт?

Крок 1. Створення проєкту

Ми відкриваємо термінал і пишемо магічне заклинання:

django-admin startproject mysite .

(Зверніть увагу на крапку в кінці! Вона каже: "Створи проєкт прямо тут, не роби зайву вкладену папку" — це професійний трюк).

Ось що ми отримуємо:

📁 mysite/          <-- Папка конфігурації (серце проєкту)
    ├── __init__.py
    ├── settings.py <-- Налаштування
    ├── urls.py     <-- Адреси
    ├── wsgi.py     <-- Вхід для сервера
📄 manage.py        <-- Пульт керування

Крок 2. Створення додатка (App)

У нас є "ТРЦ", але він порожній. Давайте створимо блог.

python manage.py startapp blog

Тепер структура змінилась:

📁 mysite/ ...
📄 manage.py
📁 blog/            <-- Наш новий додаток!
    ├── migrations/ <-- Історія змін БД
    ├── admin.py    <-- Адмінка
    ├── apps.py     <-- Налаштування додатка
    ├── models.py   <-- Структура даних (тут будуть статті)
    ├── tests.py    <-- Тести
    ├── views.py    <-- Логіка (що показувати користувачу)

Бачите логіку? * Хочете змінити налаштування всього сайту? ➡️ mysite/settings.py * Хочете змінити вигляд статті в блозі? ➡️ blog/views.py

Ми розділяємо відповідальність.


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

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

Завдання 1: "Народження проєкту"

Створіть нову папку learning_django, зайдіть у неї, створіть віртуальне оточення, активуйте його і встановіть Django. Після цього створіть проєкт із назвою config (часта практика називати папку налаштувань config або core). Підказка: Не забудьте крапку в кінці команди startproject.

Завдання 2: "Перший цеглинка"

Створіть додаток (app) під назвою pages. Він відповідатиме за прості сторінки: "Головна", "Про нас".

Завдання 3: "Знайомство" (Критично важливо!) ⚠️

Створення папки pages недостатньо. Django ще не знає про неї. Відкрийте config/settings.py, знайдіть список INSTALLED_APPS і додайте туди 'pages'. Питання: Що станеться, якщо цього не зробити, але спробувати запустити код із pages? (Спойлер: помилка ModuleNotFoundError або ігнорування).

Завдання 4: "Запуск двигуна"

Виконайте команду:

python manage.py runserver

Перейдіть за посиланням у терміналі (зазвичай http://127.0.0.1:8000). Якщо бачите ракету, що злітає 🚀 — вітаю, ви розгорнули веб-сервер!

Міні-кейс: "Архітектор"

Уявіть, що ви робите інтернет-магазин. На папері напишіть, які 3 додатки (apps) ви б створили, щоб розділити логіку? (Наприклад: products, users... що ще?)


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

Ось секрет, який відрізняє джуніора від сеньйора.

Помилка новачка: Новачок намагається запхати весь код в один додаток main або core. Всі моделі, всі url-адреси, всю логіку. Результат: Через місяць ви боїтеся відкривати файл views.py, бо там 5000 рядків коду, і ви не пам'ятаєте, де що.

Як думає профі: "Я можу використати цей код ще десь?" Принцип Reusability (Повторне використання). Якщо ви зробили класний додаток blog для одного сайту, і він у вас гарно ізольований (окрема папка), ви можете просто скопіювати цю папку в інший проєкт, підключити в settings.py — і вуаля! У вас є блог на новому сайті за 5 хвилин.

Порада з практики: Ніколи не змінюйте файл manage.py. Якщо вам треба змінити налаштування — йдіть в settings.py. Якщо вам треба додати логіку — йдіть в конкретний app. Тримайте структуру чистою.


6. 🧩 Підсумок

Що ми сьогодні зробили? 1. Зрозуміли різницю між Проєктом (будівля) та Додатком (кімната). 2. Розібрали призначення ключових файлів: manage.py, settings.py, urls.py. 3. Навчилися створювати структуру проєкту та реєструвати додатки.

Ви заклали фундамент. У вас є стіни, дах і комунікації. Але всередині поки що порожньо.

У наступному епізоді: Як змусити наш сайт відповідати? Ми розберемося, як працює URL Dispatcher і напишемо нашу першу функцію, яка скаже світові: "Hello, World!".

А поки що — попрактикуйтесь зі створенням папок. Це ваші кубики LEGO. До зустрічі! 👋