Django Environ

django-environ упрощает работу с переменными окружения и следует принципам 12-factor app.

Установка

1# Установка пакета
2pip install django-environ
1# Или через Poetry
2poetry add django-environ

Настройка settings.py

 1import environ
 2
 3env = environ.Env(
 4    DEBUG=(bool, False)
 5)
 6
 7# Чтение .env файла
 8environ.Env.read_env()
 9
10# Использование переменных
11DEBUG = env('DEBUG')
12SECRET_KEY = env('SECRET_KEY')
13DATABASE_URL = env('DATABASE_URL')
14
15DATABASES = {
16    'default': env.db()
17}

Файл .env

1DEBUG=True
2SECRET_KEY=your-secret-key-here
3DATABASE_URL=sqlite:///db.sqlite3
4REDIS_URL=redis://localhost:6379/0
5ALLOWED_HOSTS=localhost,127.0.0.1
6EMAIL_HOST=smtp.gmail.com
7EMAIL_PORT=587

Дополнительные типы

 1# Список
 2ALLOWED_HOSTS = env.list('ALLOWED_HOSTS', default=[])
 3
 4# JSON
 5LOGGING = env.json('LOGGING', default={})
 6
 7# URL
 8REDIS_URL = env.url('REDIS_URL')
 9
10# Email
11EMAIL_HOST = env.email('EMAIL_HOST')

Валидация переменных

1# Обязательные переменные
2SECRET_KEY = env('SECRET_KEY')  # Вызовет ошибку, если не найдена
3
4# С значениями по умолчанию
5DEBUG = env.bool('DEBUG', default=False)
6PORT = env.int('PORT', default=8000)

FAQ

Q: Как установить значения по умолчанию?
A: Используй второй параметр в env() или default в Env().

Q: Можно ли использовать .env.local?
A: Да, создай .env.local для локальных настроек.