Выбор правильного файла настроек для использования в Django


Я следую подходу в Две ложки Django: лучшие практики для Django 1.6 в отношении нескольких файлов настроек. Я использую Django 1.7 и virtualenvwrapper.

Моя настройка выглядит следующим образом:

project/
    app1/
    app2/
    project/
        __init__.py
        settings/
            __init__.py
            base.py
            local.py
            production.py
    manage.py

Я немного запутался в том, как Django знает, какой файл настроек использовать. Я не хочу указывать файл настроек при каждом запуске manage.py. я бы предпочел установить переменную среды DJANG_SETTINGS_MODULE, как описано в omouse anser здесь:

Что меня смущает, так это то, что wsgi.py файл есть строка:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings.production")

Используется ли этот файл только на рабочем сервере? Что произойдет, если у меня уже есть переменная среды DJANGO_SETTINGS_MODULE, определенная на сервере?

Когда я запускаю его локально, я понимаю, что мне нужно установить переменную DJANGO_SETTINGS_MODULE env каждый раз, когда я открываю консоль. Я прочитал здесь , что я могу определить postactivate крюк в virtualenvwrapper. Этот крюк затем создаст переменные среды, которые мне требуются каждый раз, когда я активирую окружающую среду.

Является ли это рекомендуемым способом обеспечения правильной загрузки переменной DJANGO_SETTINGS_MODULE env на моей локальной машине? Нужно ли мне также настроить подобный файл на моем хост-сервере? я планирую использовать PythonAnywhere для хостинга.

Наконец, если я запускаю промежуточный сервер, как я скажу Django загрузить файл промежуточных настроек? промежуточный сервер-это практически то же, что и на производственном сервере, так что, думаю, нужен другой wsgi.py файл для промежуточного сервера, но это похоже на анти-шаблон.

1 2

1 ответ:

os.environ.setdefault задает значение только в том случае, если оно не задано. Когда вы работаете в рабочей среде, экспортируйте переменную среды DJANGO_SETTINGS_MODULE и установите ее в файл параметров рабочей среды / промежуточной среды, и вам не нужно ничего устанавливать при запуске в разработке (если вы установили ее по умолчанию в параметры разработки). Это сухой-Есть способ.

Метод с local_settings.py (который в большинстве случаев держится вне РЕПО!) не является лучшей практикой, и ее следует избегать.