Ласкаво просимо на лекцію, в якій ми розберемося з основним мозковим центром будь-якого проєкту Django — файлом налаштувань settings.py. Якщо ваш проєкт — це космічний корабель, то settings.py — це його панель управління, де задаються маршрути, налаштовуються системи безпеки, підключаються двигуни (наприклад, бази даних) і навіть визначається, чи можна відключити сигналізацію (спойлер: не можна).
Файл settings.py визначає параметри конфігурації вашого проєкту. Це не просто набір випадкових рядків коду, а ключова частина, яка впливає на такі речі, як:
- Безпека застосунку.
- Підключення до баз даних.
- Локальні та продакшн налаштування.
- Управління модулями та застосунками.
- Як проєкт буде справлятися з завершальними лапками (жарт, хоча це теж важливо).
За допомогою налаштувань ви можете швидко перемикатися між різними середовищами розробки та розгортання. Наприклад, у локальному середовищі потрібен DEBUG=True, а на продакшн-сервері — ні за яких обставин!
1. Основна структура settings.py
Давайте подивимось на стандартний settings.py. Він створюється автоматично при запуску команди django-admin startproject. Основні елементи:
# settings.py
from pathlib import Path
# Базова директорія проєкту
BASE_DIR = Path(__file__).resolve().parent.parent
# Безпека
SECRET_KEY = 'ваш_секретний_ключ'
DEBUG = True
ALLOWED_HOSTS = []
# Встановлені додатки
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
# Проміжні шари (middleware)
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
# URL-адреси та WSGI
ROOT_URLCONF = 'myproject.urls'
WSGI_APPLICATION = 'myproject.wsgi.application'
# База даних
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
# Мова та часовий пояс
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_TZ = True
# Статичні файли
STATIC_URL = 'static/'
# Налаштування медіаконтенту (якщо потрібно)
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'
1.1. BASE_DIR
Ця змінна визначає базову директорію проєкту. Вона створена за допомогою модуля pathlib, який спрощує роботу зі шляхами.
Ось що відбувається:
BASE_DIR = Path(__file__).resolve().parent.parent
__file__: шлях до поточного файлу (settings.py)..resolve().parent.parent: дозволяє піднятись на два рівні вгору, щоб отримати шлях до кореневої директорії проєкту.
Якщо вам потрібно якесь місце для зберігання файлів (наприклад, логів), ви можете вручну додавати шляхи, використовуючи BASE_DIR:
LOGS_DIR = BASE_DIR / "logs"
1.2. SECRET_KEY
SECRET_KEY — це один із найважливіших параметрів. Він відповідає за шифрування токенів, хешування паролів та інші аспекти безпеки. Ніколи не діліться цим ключем і не завантажуйте його в публічні репозиторії (наприклад, GitHub).
Для генерації сильного ключа можна використовувати Django секретний генератор.
1.3. DEBUG
Цей параметр відповідає за увімкнення режиму відладки. Якщо DEBUG=True, на екрані браузера при помилках будуть відображатись подробиці про них. Це корисно на стадії розробки, але дуже небезпечно в продакшені. На бойовому сервері DEBUG повинен бути завжди встановлений у False.
Не забудьте, що при DEBUG=False ви також повинні заповнити ALLOWED_HOSTS.
1.4. ALLOWED_HOSTS
Цей параметр визначає список хостів (доменів), з яких ваш сервер приймає запити. За замовчуванням він порожній, але для продакшена сюди необхідно додати доменне ім'я вашого сайту, наприклад:
ALLOWED_HOSTS = ['example.com', 'www.example.com']
Для локального сервера можна залишити його порожнім або використовувати:
ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
2. INSTALLED_APPS
Список застосунків, які активовані в проєкті. Django включає в проєкт кілька вбудованих застосунків, таких як:
django.contrib.admin— панель адміністратора.django.contrib.auth— система автентифікації користувачів.django.contrib.sessions— управління сесіями.django.contrib.staticfiles— обробка статичних файлів.
Якщо ти додаєш новий застосунок у проєкт (наприклад, за допомогою python manage.py startapp blog), його також потрібно зареєструвати тут:
INSTALLED_APPS += ['blog']
3. MIDDLEWARE
MIDDLEWARE — це список проміжних шарів, які обробляють запити та відповіді. Кожен шар виконує свою задачу, наприклад:
SecurityMiddleware— обробляє налаштування безпеки.CsrfViewMiddleware— захист від CSRF-атак.SessionMiddleware— управління сесіями.
Порядок має значення: кожен шар обробляється зверху вниз.
4. Налаштування бази даних (DATABASES)
За замовчуванням Django використовує SQLite, але ти можеш підключити будь-яку іншу базу даних, наприклад, PostgreSQL, MySQL або навіть MongoDB (але за допомогою сторонніх бібліотек).
Приклад налаштування для PostgreSQL:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '5432',
}
}
Для роботи з PostgreSQL не забудь встановити пакет psycopg2:
pip install psycopg2
5. Часовий пояс і мова (LANGUAGE_CODE, TIME_ZONE)
Ці параметри задають мову та часовий пояс для проєкту. За замовчуванням встановлені англійська мова та UTC. Наприклад, для Молдови можна використовувати:
LANGUAGE_CODE = 'ro-RO'
TIME_ZONE = 'Europe/Chisinau'
Для відображення дат і часу також мають бути увімкнені:
USE_I18N: підтримка інтернаціоналізації.USE_TZ: використання часових поясів.
6. Робота зі статичними та медіа-файлами (STATIC_URL, MEDIA_URL)
Django розділяє статичні файли (CSS, JS, зображення) та медіа-файли (файли, завантажені користувачами).
Статичні файли:
STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR / 'static']
Медіа-файли (потрібно створити MEDIA_ROOT):
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'
Рекомендації щодо управління налаштуваннями
Розділіть налаштування для розробки та продакшена: використовуйте модуль
os.environабо пакет django-environ для управління змінними оточення.Не зберігайте конфіденційні дані в репозиторії: приховану інформацію (ключі, паролі) зберігайте у файлі
.env.Використовуйте шаблони та контейнери: наприклад, Docker дозволяє ефективно підключати налаштування до вашого проєкту через змінні оточення.
SECRET_KEY = os.getenv('SECRET_KEY', 'ваш_резервний_ключ')
Тепер ви готові використовувати settings.py як справжній майстер налаштування свого корабля Django!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ