Настройки 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. Обратите внимание, что модуль настроек должен находиться в пути Python sys.path.
Утилита 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, вы можете передать модуль или класс, предоставляющий настройки по умолчанию, как аргумент default_settings (или как первый позиционный аргумент) в вызове configure().
В этом примере значения по умолчанию берутся из 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.setup() требуется для использования Django «в автономном режиме»
Если вы используете компоненты 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/5.2/topics/settings/