Налаштування (settings.py)
Розділення налаштувань за середовищами Існує кілька підходів до розділення налаштувань. Один із найпоширеніших — створення окремих файлів для кожного середовища (development, production, staging) з імпортом спільних параметрів із базового файлу settings.py.
myproject/
├── manage.py
└── myproject/
├── __init__.py
├── settings.py # Базові налаштування
├── settings_dev.py # Налаштування для розробки
├── settings_prod.py # Налаштування для production
├── urls.py
├── asgi.py
└── wsgi.pyВибір файлу налаштувань при запуску
Для вказівки Django, який файл налаштувань використовувати, застосовується змінна середовища DJANGO_SETTINGS_MODULE
Під час розгортання на сервері (production) ця змінна встановлюється в конфігурації сервера.
# macOS/Linux
export DJANGO_SETTINGS_MODULE=myproject.settings_dev
python manage.py runserver
# Windows (PowerShell)
$env:DJANGO_SETTINGS_MODULE="myproject.settings_dev"
python manage.py runserverЗміна settings.py
- BASE_DIR: шлях до кореневої директорії вашого проєкту.
- SECRET_KEY: секретний ключ, що використовується для забезпечення безпеки вашого додатку. Для генерації сильного ключа можна використовувати Django секретний генератор.
- DEBUG: режим налагодження.
- ALLOWED_HOSTS: список доменних імен, які ваше додаток може обслуговувати.
- INSTALLED_APPS: список додатків, підключених до вашого проєкту.
- MIDDLEWARE: список проміжних обробників (middleware), які обробляють запити та відповіді.
- DATABASES: налаштування бази даних.
- TEMPLATES: налаштування шаблонів.
- STATIC_URL: URL, за яким будуть доступні статичні файли (CSS, JavaScript, зображення).
- STATICFILES_DIRS: вказує Django, де шукати додаткові статичні файли.
- MEDIA_URL: шляхів для медіафайлів (завантажувані картинки).
- MEDIA_ROOT: локальна папка, де файли будуть фізично зберігатися.
- TIME_ZONE: тайм зона
- LANGUAGE_CODE: мова застосунку
TIME_ZONE = 'Europe/Kyiv'
LANGUAGE_CODE = 'uk-ua'Конфігурація DATABASES
Налаштування підключення до БД здійснюється в словнику DATABASES
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': os.environ.get('DATABASE_PASSWORD'),
'HOST': 'localhost',
'PORT': '5432',
}
}Поля конфігурації бази даних:
- ENGINE: Визначає движок бази даних. Наприклад:
- django.db.backends.sqlite3 — движок для SQLite.
- django.db.backends.postgresql — для PostgreSQL.
- django.db.backends.mysql — для MySQL.
- NAME: для SQLite це шлях до вашого файлу бази даних. Для PostgreSQL/MySQL — це ім'я бази даних.
- USER: ім'я користувача для підключення до бази даних (неактуально для SQLite, але потрібно для інших движків).
- PASSWORD: пароль користувача для бази даних.
- HOST: локація бази даних (зазвичай localhost для локальної розробки або IP-адреса сервера).
- PORT: порт, який використовується для підключення до бази даних (зазвичай 5432 для PostgreSQL, 3306 для MySQL).
Налаштування PostgreSQL
- Встановити драйвер psycopg2 для взаємодії з PostgreSQL:
pip install psycopg2-binary- Змінити налаштування у settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql', # Движок PostgreSQL
'NAME': 'mydatabase', # Ім'я бази даних
'USER': 'mydatabaseuser', # Користувач
'PASSWORD': 'mypassword', # Пароль
'HOST': 'localhost', # Адреса сервера
'PORT': '5432', # Порт
}
}- Створити базу даних у PostgreSQL:
- Відкрийте консоль PostgreSQL:
psql -U postgres- Створіть нову базу даних:
CREATE DATABASE mydatabase;- Створіть нового користувача та задайте йому пароль:
CREATE USER mydatabaseuser WITH PASSWORD 'mypassword';- Надайте користувачу права на базу даних:
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO mydatabaseuser;Налаштування MySQL
- Встанови драйвер mysqlclient:
pip install mysqlclient2. Налаштуй settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '3306',
}
}3. Створи базу даних та користувача (аналогічно PostgreSQL).
Статичні та медіафайли
- STATIC_URL – URL -префікс (зазвичай /static/).
- STATIC_ROOT - шлях до папки для збору статики (використовується при команді collectstatic, для production).
- STATICFILES_DIRS - додаткові папки зі статикою (окрім папок static в додатках).
STATIC_URL = '/static/’
# STATIC_ROOT = BASE_DIR / 'staticfiles' # Зазвичай для production
STATICFILES_DIRS = [ BASE_DIR / "static", ]Команда manage.py collectstatic збирає всі статичні файли проєкту в одну папку (STATIC_ROOT). Це необхідно для розгортання додатку на сервері.
У режимі розробки (DEBUG = True) Django самостійно обробляє статичні файли.
python manage.py collectstatic
Рекомендації щодо управління налаштуваннями
- Розділіть налаштування для розробки та продакшена: використовуйте модуль os.environ або пакет django-environ для управління змінними оточення.
- Не зберігайте конфіденційні дані в репозиторії: приховану інформацію (ключі, паролі) зберігайте у файлі .env.
- Використовуйте шаблони та контейнери: наприклад, Docker дозволяє ефективно підключати налаштування до вашого проєкту через змінні оточення.
SECRET_KEY = os.getenv('SECRET_KEY', 'ваш_резервний_ключ')