Настройки 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 пути поиска импорта.
Утилита 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() внутри блока %%%CODE_BLOCK_70%%:
if __name__ == "__main__":
import django
django.setup()
См. также
- Ссылка на настройки
- Содержит полный список настроек основных и сторонних приложений.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/4.2/topics/settings/