Тепер настав час зазирнути всередину створеного проєкту та розібратися, яка структура Django-проєкту. Щоб не боятися папок і файлів, які, на перший погляд, виглядають, як схема токійського метро.
Коли ви створюєте Django-проєкт, він вже надає вам усе необхідне для початку розробки. Але як тільки проєкт почне «рости» і набувати форми, структура відіграє ключову роль у його підтримці. Інтуїтивно зрозуміла організація файлів — це не просто краса! Вона впливає на:
- зручність навігації для вас і вашої команди,
- простоту додавання нових функцій,
- швидкість відладки,
- масштабованість і підтримку коду в майбутньому.
Простіше кажучи, це основа, на якій ви будуєте ваш вебзастосунок.
Що створюється командою startproject?
Коли ви виконуєте команду django-admin startproject myproject, Django створює структуру файлів, схожу на цю:
myproject/
│
├── manage.py
├── myproject/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── asgi.py
│ └── wsgi.py
Тепер розберемо, що саме являють собою ці файли та папки.
Коренева директорія проєкту
myproject/ — коренева папка проєкту
- Це основна папка, в якій стартує ваш проєкт. Вона створюється в тому місці, де ви запустили команду
startproject. - У ній знаходяться:
- Скрипт
manage.py. - Вкладена папка з таким самим ім'ям, як ваш проєкт
myproject, в якій лежать налаштування проєкту.
- Скрипт
Файл manage.py
Цей файл — ваш друг і союзник! Він слугує командним центром для управління проєктом. Хочете запустити сервер? Створити застосунок? Зробити міграції? Можна, використовуйте manage.py.
Приклад використання:
# Запуск локального сервера
python manage.py runserver
# Створення нового застосунку
python manage.py startapp myapp
# Застосування міграцій
python manage.py migrate
Для любителів аналогій: manage.py — ваш пульт управління космічним кораблем Django.
Папка <ім'я_проєкту>/ (наприклад, myproject/)
Ця папка має те ж ім'я, що і ваш проєкт. Вона містить конфігураційні файли, які роблять ваш проєкт «живим».
Файл __init__.py
Цей файл робить папку myproject модулем Python. Без нього Python не буде сприймати папку як пакет. Сам файл, як правило, порожній (але іноді його можна використовувати для деяких хитрих речей, наприклад, імпорту).
Файл settings.py
Файл налаштувань — це мозок вашого проєкту. Тут ви конфігуруєте все: від підключення до бази даних до налаштувань безпеки. Ось основні секції:
INSTALLED_APPS: список застосунків проєкту, наприклад, адмінка, форми, ваш код.DATABASES: налаштування для бази даних.TEMPLATES: налаштування шаблонів.STATIC_URLіMEDIA_URL: вказівка шляхів для статичних (CSS, JS) і медіафайлів (завантажувані картинки).
Приклад скороченого файлу settings.py:
# settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
Файл urls.py
Файл маршрутів, або, як його називають у Django, URLConf. Саме тут ви вказуєте, якому представленню має бути переданий запит від конкретного URL. Наприклад:
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls), # Шлях до адмін-панелі
]
Не переймайтеся, у лекціях про маршрутизацію ми повернемося до цього файлу ще багато разів.
Файл asgi.py
Цей файл використовується для конфігурації ASGI (Asynchronous Server Gateway Interface) сервера. Якщо ви вирішите додати в проєкт асинхронні можливості, наприклад, чати або WebSocket-з'єднання, ASGI стане вашим героєм.
Файл wsgi.py
Схожий на asgi.py, але для WSGI (Web Server Gateway Interface). Цей файл використовується для деплою вашого проєкту на продакшені. Зазвичай його чіпати не доводиться.
Розширення проєкту
Django дотримується принципу «розділяй і володарюй»: замість того, щоб звалити весь код в одну купу, він припускає, що ваш проєкт складатиметься з кількох додатків (apps). Додатки в Django — це окремі модулі, які виконують конкретні завдання, наприклад, блог, магазин або система коментарів.
Як створювати нові компоненти?
Хочете додати нову функціональність у проєкт? Наприклад, розділ новин? Тоді створіть для нього окремий додаток:
python manage.py startapp news
Після виконання цієї команди з'явиться нова структура:
news/
├── admin.py
├── apps.py
├── models.py
├── tests.py
├── views.py
└── migrations/
└── __init__.py
Кожен файл тут відповідає за свою частину функціональності:
models.py— тут визначаються моделі даних, які пов'язані з базою данихviews.py— тут пишеться логіка обробки запитів.admin.py— налаштування відображення моделі в адмінці.-
tests.py— тести для вашого додатку.
Не забудьте зареєструвати новий додаток у INSTALLED_APPS у файлі settings.py:
INSTALLED_APPS = [
...
'news', # наш новий додаток
]
Візуальна схема структури проєкту
myproject/
│
├── manage.py # Командний центр проєкту
├── myproject/ # Конфігураційна папка проєкту
│ ├── __init__.py # Робить папку модулем Python
│ ├── settings.py # Налаштування проєкту
│ ├── urls.py # Маршрутизація
│ ├── asgi.py # ASGI-конфігурація
│ └── wsgi.py # WSGI-конфігурація
├── myapp/ # Приклад застосунку
│ ├── admin.py # Налаштування адмінки
│ ├── apps.py # Налаштування застосунку
│ ├── models.py # Моделі даних
│ ├── tests.py # Тести
│ ├── views.py # Представлення
│ └── migrations/ # Міграції бази даних
│ └── __init__.py
Особливості та підводні камені
Коли ви тільки починаєте працювати з Django, структура проєкту може здатися трохи складною через велику кількість файлів. Ось кілька порад:
- Не бійтеся видаляти порожні файли, якщо не використовуєте їх. Наприклад, не пишете тести зараз — приберіть
tests.py. Головне, щоб потім не забути їх додати. - Поділ на додатки — це не завжди строго. Іноді два невеликих модулі можна об'єднати в один додаток, щоб не множити сутності.
- Тримайте налаштування для різних середовищ окремо. Наприклад, ви можете створити
settings_dev.pyдля розробки таsettings_prod.pyдля продакшн-сервера. Це покращить підтримку.
Тепер ви можете впевнено працювати зі структурою Django-проєкту і досконало розумієте, що робить кожен файл. У наступній лекції ми почнемо заглиблюватися в роботу з командами manage.py і створенням першого додатка!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ