Настройки Django
Файл настроек Django содержит всю конфигурацию вашей установки Django. В этом документе объясняется, как работают настройки и какие настройки доступны.
Основы
Файл настроек — это просто модуль Python с переменными на уровне модуля.
Вот несколько примеров настроек:
ALLOWED_HOSTS = ["www.example.com"] DEBUG = False DEFAULT_FROM_EMAIL = "webmaster@example.com"
Примечание
Если вы установите DEBUG в значение False, необходимо также правильно настроить параметр ALLOWED_HOSTS.
Поскольку файл настроек — это модуль Python, к нему применимо следующее:
- В нём не допускаются синтаксические ошибки Python.
-
В нём можно динамически назначать настройки, используя обычный синтаксис Python. Например:
MY_SETTING = [str(i) for i in range(30)]
- Из других файлов настроек можно импортировать значения.
Указание настроек
-
DJANGO_SETTINGS_MODULE
При использовании Django необходимо указать, какие настройки вы используете. Для этого задайте переменную окружения DJANGO_SETTINGS_MODULE.
Значение DJANGO_SETTINGS_MODULE должно быть указано в формате пути Python, например mysite.settings. Обратите внимание, что модуль настроек должен находиться в sys.path Python.
Утилита django-admin
При использовании django-admin можно либо задать переменную окружения один раз, либо явно передавать модуль настроек каждый раз при запуске утилиты.
Пример (оболочка Unix Bash):
export DJANGO_SETTINGS_MODULE=mysite.settings django-admin runserver
Пример (оболочка Windows):
set DJANGO_SETTINGS_MODULE=mysite.settings django-admin runserver
Используйте аргумент командной строки --settings, чтобы указать настройки вручную:
django-admin runserver --settings=mysite.settings
На сервере (mod_wsgi)
В рабочем окружении сервера необходимо указать приложению WSGI, какой файл настроек использовать. Для этого используйте os.environ:
import os os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"
Дополнительные сведения и информацию о других распространённых компонентах приложения Django WSGI см. в документации Django по mod_wsgi.
Настройки по умолчанию
Файл настроек Django не обязан определять какие-либо настройки, если в этом нет необходимости. Для каждой настройки предусмотрено разумное значение по умолчанию. Эти значения по умолчанию находятся в модуле django/conf/global_settings.py.
При формировании настроек Django использует следующий алгоритм:
- Загружает настройки из
global_settings.py. - Загружает настройки из указанного файла настроек, при необходимости переопределяя глобальные настройки.
Обратите внимание, что файл настроек не должен импортировать данные из global_settings, поскольку это избыточно.
Просмотр изменённых настроек
Команда python manage.py diffsettings отображает различия между текущим файлом настроек и настройками Django по умолчанию.
Дополнительные сведения см. в diffsettings.
Использование настроек в коде Python
В приложениях Django используйте настройки, импортируя объект django.conf.settings. Например:
from django.conf import settings
if settings.DEBUG:
# Do something
...
Обратите внимание, что django.conf.settings — это не модуль, а объект. Поэтому импортировать отдельные настройки нельзя:
from django.conf.settings import DEBUG # This won't work.
Также обратите внимание, что ваш код не должен импортировать данные ни из global_settings, ни из вашего собственного файла настроек. django.conf.settings абстрагирует понятия настроек по умолчанию и настроек конкретного сайта, предоставляя единый интерфейс. Кроме того, он отделяет код, использующий настройки, от расположения этих настроек.
Изменение настроек во время выполнения
Не следует изменять настройки в приложениях во время выполнения. Например, не делайте этого в представлении:
from django.conf import settings settings.DEBUG = True # Don't do this!
Назначать значения настройкам следует только в файле настроек.
Безопасность
Поскольку файл настроек содержит конфиденциальную информацию, например пароль базы данных, постарайтесь максимально ограничить доступ к нему. Например, измените права доступа к файлу так, чтобы его могли читать только вы и пользователь веб-сервера. Это особенно важно в среде виртуального хостинга с общим доступом.
Доступные настройки
Полный список доступных настроек см. в справочнике по настройкам.
Создание собственных настроек
Ничто не мешает вам создавать собственные настройки для своих приложений Django, но следуйте этим рекомендациям:
- Имена настроек должны состоять только из заглавных букв.
- Не создавайте заново уже существующую настройку.
Для последовательностей Django использует списки, но это лишь соглашение.
Использование настроек без задания DJANGO_SETTINGS_MODULE
В некоторых случаях может понадобиться обойти переменную окружения DJANGO_SETTINGS_MODULE. Например, если вы используете только систему шаблонов, вероятно, вам не захочется настраивать переменную окружения, указывающую на модуль настроек.
В таких случаях можно настроить параметры Django вручную. Для этого вызовите:
-
django.conf.settings.configure(default_settings, **settings)
Пример:
from django.conf import settings settings.configure(DEBUG=True)
Передайте в configure() любое количество именованных аргументов, каждый из которых задаёт настройку и её значение. Имена аргументов должны состоять только из заглавных букв и совпадать с именами настроек, описанными выше. Если определённая настройка не передана в configure(), но понадобится позднее, Django использует её значение по умолчанию.
Настраивать Django таким способом обычно необходимо — и даже рекомендуется, — когда вы используете компонент фреймворка внутри более крупного приложения.
Следовательно, при настройке через settings.configure() Django не будет вносить никаких изменений в переменные окружения процесса (о причинах обычного поведения см. документацию по TIME_ZONE). В таких случаях предполагается, что вы полностью контролируете своё окружение.
Пользовательские настройки по умолчанию
Если вы хотите получать значения по умолчанию не из django.conf.global_settings, в вызов configure() можно передать модуль или класс, предоставляющий настройки по умолчанию, в качестве аргумента default_settings (или первого позиционного аргумента).
В этом примере настройки по умолчанию берутся из myapp_defaults, а настройка DEBUG устанавливается в значение True независимо от её значения в myapp_defaults:
from django.conf import settings from myapp import myapp_defaults settings.configure(default_settings=myapp_defaults, DEBUG=True)
Следующий пример, в котором myapp_defaults используется как позиционный аргумент, эквивалентен:
settings.configure(myapp_defaults, DEBUG=True)
Обычно переопределять значения по умолчанию таким способом не требуется. Настройки Django по умолчанию достаточно нейтральны, чтобы безопасно их использовать. Имейте в виду, что при передаче нового модуля значений по умолчанию он полностью заменяет настройки Django по умолчанию. Поэтому необходимо указать значение для каждой настройки, которая может использоваться в импортируемом коде. Полный список приведён в django.conf.settings.global_settings.
Необходимо использовать либо configure(), либо DJANGO_SETTINGS_MODULE
Если вы не задаёте переменную окружения DJANGO_SETTINGS_MODULE, необходимо обязательно вызвать configure() до использования любого кода, который обращается к настройкам.
Если вы не зададите DJANGO_SETTINGS_MODULE и не вызовете configure(), при первом обращении к настройке Django вызовет исключение ImportError.
Если вы зададите DJANGO_SETTINGS_MODULE, получите доступ к значениям настроек и затем вызовете configure(), Django вызовет RuntimeError, сообщающее, что настройки уже сконфигурированы. Для этой цели предусмотрено свойство:
-
django.conf.settings.configured
Например:
from django.conf import settings
if not settings.configured:
settings.configure(myapp_defaults, DEBUG=True)
Кроме того, повторный вызов configure() или вызов configure() после обращения к любой настройке считается ошибкой.
Итак, используйте ровно один из двух способов: configure() или DJANGO_SETTINGS_MODULE. Не оба и не ни один из них.
Для автономного использования Django необходимо вызвать django.setup()
Если вы используете компоненты Django автономно — например, пишете скрипт Python, который загружает и отображает шаблоны Django или использует ORM для получения данных, — помимо настройки параметров потребуется выполнить ещё один шаг.
После того как вы задали DJANGO_SETTINGS_MODULE или вызвали configure(), необходимо вызвать django.setup(), чтобы загрузить настройки и заполнить реестр приложений Django. Например:
import django from django.conf import settings from myapp import myapp_defaults settings.configure(default_settings=myapp_defaults, DEBUG=True) django.setup() # Now this script or any imported module can use any part of Django it needs. from myapp import models
Обратите внимание, что вызывать django.setup() нужно только в том случае, если код действительно работает автономно. При запуске веб-сервером или через django-admin Django сделает это за вас.
django.setup() можно вызывать только один раз.
Поэтому не размещайте повторно используемую логику приложения в автономных скриптах, которые затем приходится импортировать в другие части приложения. Если этого не избежать, поместите вызов django.setup() внутрь блока if:
if __name__ == "__main__":
import django
django.setup()
См. также
- Справочник по настройкам
-
Содержит полный список основных настроек и настроек приложений contrib.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/6.0/topics/settings/