Разделение настроек в Django

Fri 29 June 2012

В Django wiki собраны различные способы разделения настроек. Мне нравится вариант, описанный в блоге Senko Rašić:

settings/
├── __init__.py
├── base.py
├── development.py
├── local.py
└── production.py

base.py содержит общие настройки для development.py и production.py, например:

ADMINS = ()
MANAGERS = ADMINS

TIME_ZONE = 'Asia/Yekaterinburg'
# ...

production.py содержит настройки для эксплуатации. Как минимум, необходимо выключить режим отладки:

from .base import *

DEBUG = False
TEMPLATE_DEBUG = DEBUG
# ...

development.py содержит настройки, необходимые для разработки. Настройки должны быть одинаковы и полезны для всех участников процесса разработки, например:

from .base import *

DEBUG = True
TEMPLATE_DEBUG = DEBUG
# ...

Все индивидуальные настройки разработчика необходимо вынести в local.py. Например, это могут быть настройки подключения к БД, любимые инструменты разработки и так далее:

from .development import *

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': "developer's db name",
        'USER': "developer's db user",
        'PASSWORD': "developer's db password",
        'HOST': ''
        'PORT': '',
    }
}

На production сервере local.py обычно содержит настройки подключения к БД:

from .production import *

local.py не должен отслеживаться VCS.

Для Django 1.4 в файлах repo-name/project_name/wsgi.py и repo-name/manage.py нужно указать путь до local.py:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project_name.settings.local")

У меня не получилось разместить local.py на heroku, чтобы файл не находился под контролем git (плохо искал?). Самое простое решение -- избавиться от local.py, в manage.py указать project_name.settings.development, а в wsgi.py -- project_name.settings.production. Еще можно использовать heroku config:

$ heroku config:add SECRET_KEY=my_unique_secret_key

Category: Python Tagged: python django settings

Comments