Це чудова ідея! Девід Малан — майстер пояснювати складні концепції так, що хочеться слухати ще.
Ось урок на тему «Структура 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 генерує кілька файлів. Давайте подивимося на них, як на органи живого організму:
manage.py🕹️- Це ваш пульт керування. Ви не пишете тут код. Ви використовуєте цей файл, щоб віддавати команди: "Запусти сервер", "Створи базу даних", "Створи нового користувача".
settings.py⚙️- Серце і мозок. Тут записано все: якою мовою сайт, де лежить база даних, які "магазини" (apps) встановлені в нашому ТРЦ.
urls.py🚦- Диспетчер (Ресепшн). Коли користувач вводить адресу
google.com/maps, саме цей файл вирішує, куди направити запит — у відділ "Карт" чи у відділ "Пошуку".
- Диспетчер (Ресепшн). Коли користувач вводить адресу
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. До зустрічі! 👋