Налаштування (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',
	}
}

Поля конфігурації бази даних:

  1. ENGINE: Визначає движок бази даних. Наприклад:
    • django.db.backends.sqlite3 — движок для SQLite.
    • django.db.backends.postgresql — для PostgreSQL.
    • django.db.backends.mysql — для MySQL.
  2. NAME: для SQLite це шлях до вашого файлу бази даних. Для PostgreSQL/MySQL — це ім'я бази даних.
  3. USER: ім'я користувача для підключення до бази даних (неактуально для SQLite, але потрібно для інших движків).
  4. PASSWORD: пароль користувача для бази даних.
  5. HOST: локація бази даних (зазвичай localhost для локальної розробки або IP-адреса сервера).
  6. PORT: порт, який використовується для підключення до бази даних (зазвичай 5432 для PostgreSQL, 3306 для MySQL).

Налаштування PostgreSQL

  1. Встановити драйвер psycopg2 для взаємодії з PostgreSQL:
pip install psycopg2-binary
  1. Змінити налаштування у settings.py:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',  # Движок PostgreSQL
        'NAME': 'mydatabase',                      # Ім'я бази даних
        'USER': 'mydatabaseuser',                  # Користувач
        'PASSWORD': 'mypassword',                  # Пароль
        'HOST': 'localhost',                       # Адреса сервера
        'PORT': '5432',                            # Порт
    }
}
  1. Створити базу даних у PostgreSQL:
    • Відкрийте консоль PostgreSQL:
psql -U postgres
  • Створіть нову базу даних:
CREATE DATABASE mydatabase;
  • Створіть нового користувача та задайте йому пароль:
CREATE USER mydatabaseuser WITH PASSWORD 'mypassword';
  • Надайте користувачу права на базу даних:
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO mydatabaseuser;

Налаштування MySQL

  1. Встанови драйвер mysqlclient:
pip install mysqlclient

2. Налаштуй 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

 

Рекомендації щодо управління налаштуваннями

  1. Розділіть налаштування для розробки та продакшена: використовуйте модуль os.environ або пакет django-environ для управління змінними оточення.
  2. Не зберігайте конфіденційні дані в репозиторії: приховану інформацію (ключі, паролі) зберігайте у файлі .env.
  3. Використовуйте шаблони та контейнери: наприклад, Docker дозволяє ефективно підключати налаштування до вашого проєкту через змінні оточення.
SECRET_KEY = os.getenv('SECRET_KEY', 'ваш_резервний_ключ')
2015-2026 © SumyNikNet