Отдельный набор настроек для рабочего режима Django
До сих пор мы имели дело только с одним файлом параметров settings, ру, который генерируется командой django-admin.py startproject. Но когда дело дойдет до развертывания приложения, вы, наверное, захотите иметь несколько файлов с параметрами, чтобы не смешивать среду разработки с действующей. (Например, вам вряд ли понравится изменять значение DEBUG с False на True всякий раз, как надо будет протестировать
внесенные изменения на локальной машине.) Django упрощает решение этой задачи, позволяя заводить несколько файлов с параметрами.
Организовать отдельные файлы с параметрами для режимов разработки и эксплуатации можно тремя способами:
• Создать два полных и независимых файла с параметрами.
• Создать базовый файл с параметрами (скажем, для разработки) и второй файл (скажем, для эксплуатации), в который просто импортировать первый файл и переопределить необходимые параметры.
• Завести единый файл с параметрами, в который будет встроена некая логика на языке Python, изменяющая значения параметров в зависимости от контекста.
Рассмотрим все три способа по очереди.
Первый способ, самый простой, подразумевает создание двух независимых файлов с параметрами. Если вы следовали за примерами в книге, то файл settings, ру у вас уже есть. Скопируйте его и назовите новый файл settings_production.py (имя может быть любым). В этом файле измените параметр DEBUG и так далее.
Второй способ аналогичен, но позволяет уменьшить дублирование. Вместо того чтобы заводить два почти идентичных файла, можно считать один базовым, а во втором импортировать его. Например:
tt settings, ру
DEBUG = True TEMPLATE_DEBUG - DEBUG
DATABASE_ENGINE = ‘postgresql_psycopg2′ DATABASE_NAME = ‘devdb’ DATABASEJJSER = ” DATABASE_PASSWORD = ” DATABASE_PORT = ”
U …
tt settings_production.py from settings import *
DEBUG - TEMPLATE_DEBUG - False DATABASE_NAME = ‘production’ DATABASEJJSER - ‘app’ DATABASE_PASSWORD = ‘letmein’
Здесь settings_production.py импортирует все параметры из settings.ру, затем переопределяет те из них, которые должны иметь другие значения в рабочем режиме. В данном случае мы не только установили параметр DEBUG в значение False, но и определили другие параметры доступа к базе данных. (Мы хотели показать, что переопределять можно любые параметры, а не только DEBUG.)
Наконец, самый лаконичный способ организации двух наборов параметров заключается в том, чтобы реализовать ветвление в единственном файле в зависимости от режима работы. Например, можно проверять имя сервера:
# settings.ру
import socket
if socket.gethostname() == ‘my-laptop’:
DEBUG = TEMPLATE_DEBUG - True else:
DEBUG = TEMPLATE_DEBUG = False U …
Здесь мы импортируем модуль socket из стандартной библиотеки Python и сравниваем его с именем сервера, на котором исполняется программа.
Главное - усвоить, что файл параметров - это обычный код на языке Python. Он может импортировать код из других файлов, реализовы- вать произвольную логику и т. д. Остается только позаботиться, чтобы в файле с параметрами не было ошибок. Любое необработанное исключение в нем приведет к немедленному краху Django.
Переименование settings.ру
Файл settings.ру можно назвать любым другим именем: settings_ dev.py, settings/dev.py или даже foobar.py. Django все равно, лишь бы вы сообщили, как называется файл.
Но, переименовав файл settings.ру, сгенерированный командой django-admin.ру startproject, вы обнаружите, что утилита manage.ру выдает сообщение об ошибке, сообщая об отсутствии файла с параметрами. Объясняется это тем, что она пытается импортировать модуль с именем settings. Чтобы исправить ошибку, измените имя модуля в файле manage.ру, подставив вместо него имя своего модуля, или пользуйтесь командой django-admin.ру вместо manage.ру. В последнем случае переменная окружения DJANGO_SET- TINGS_MODULE должна содержать путь Python к вашему файлу с параметрами (например, ‘mysite.settings’).
Переменная DJANGO_SETTINGS_MODULE
Разобравшись с этими вопросами, перейдем далее к рекомендациям, касающимся развертывания в конкретной среде, например, на сервере Apache. В каждой среде есть свои особенности, но одно остается неизменным: веб-серверу следует сообщить значение переменной DJANG0_ SETTINGS_MODULE - точку входа в приложение Django. Эта переменная
указывает на файл с параметрами, который, в свою очередь, указывает на корневую конфигурацию URL R00T_URLC0NF, та указывает на представления и так далее.
Переменная DJANGO_SETTINGS_MODULE - это путь Python к файлу с параметрами. Например, если предположить, что каталог mysite включен в путь Python, значением переменной DJANGO_SETTINGS_MODULE для нашего текущего примера будет ‘mysite. settings’.
Источник: Головатый А., Каплан-Мосс Дж. Django. Подробное руководство, 2-е издание. - Пер. с англ. - СПб.: Символ- Плюс, 2010. - 560 е., ил.