- Django settings
- The basics
- Назначение настроек
- django-admin утилиты
- На сервере ( mod_wsgi )
- Default settings
- Просмотр настроек,которые вы изменили
- Использование настроек в коде Python
- Изменение настроек во время выполнения
- Security
- Available settings
- Создание собственных настроек
- Использование настроек без установки DJANGO_SETTINGS_MODULE
- Пользовательские настройки по умолчанию
- Требуется либо configure() либо DJANGO_SETTINGS_MODULE
- Вызов django.setup() требуется для «автономного» использования Django.
Django settings
Файл настроек Django содержит все настройки установки Django.Этот документ объясняет,как работают настройки и какие из них доступны.
The basics
Файл настроек-это просто модуль Python с переменными модульного уровня.
Вот пара примеров настроек:
Если вы установите для DEBUG значение False , вам также необходимо правильно установить параметр ALLOWED_HOSTS .
Поскольку файл настроек является модулем Python,применяется следующее:
- Он не допускает синтаксических ошибок Python.
- Он может назначать настройки динамически,используя обычный синтаксис Python.Например:
MY_SETTING = [str(i) for i in range(30)]
Назначение настроек
Когда вы используете 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
set DJANGO_SETTINGS_MODULE=mysite.settings django-admin runserver
Используйте —settings командной строки —settings, чтобы указать настройки вручную:
django-admin runserver --settings=mysite.settings
На сервере ( mod_wsgi )
В вашей рабочей серверной среде вам нужно указать приложению WSGI, какой файл настроек использовать. Сделайте это с помощью os.environ :
import os os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
Прочитайте документацию по Django mod_wsgi для получения дополнительной информации и других общих элементов для приложения Django WSGI.
Default settings
Файл настроек 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: # Сделай что-нибудь
Обратите внимание, что django.conf.settings — это не модуль, а объект. Поэтому импорт отдельных настроек невозможен:
from django.conf.settings import DEBUG # Это не сработает.
Также обратите внимание, что ваш код не должен импортироваться ни из global_settings , ни из вашего собственного файла настроек. django.conf.settings абстрагирует понятия настроек по умолчанию и настроек, специфичных для сайта; это представляет единый интерфейс. Он также разделяет код, который использует настройки, от расположения ваших настроек.
Изменение настроек во время выполнения
Вы не должны изменять настройки в своих приложениях во время выполнения.Например,не делайте этого в представлении:
from django.conf import settings settings.DEBUG = True # Не делай этого!
Единственное место,которое необходимо присвоить настройкам-это файл настроек.
Security
Поскольку файл настроек содержит конфиденциальную информацию,например,пароль базы данных,вы должны предпринять все попытки ограничить доступ к нему.Например,измените права доступа к файлу так,чтобы его могли читать только вы и пользователь вашего веб-сервера.Это особенно важно в среде общего хостинга.
Available settings
Полный список доступных настроек см. В справочнике настроек .
Создание собственных настроек
Ничто не мешает вам создавать свои собственные настройки для своих Django-приложений,но следуйте этим рекомендациям:
- Имена настроек должны быть все заглавными.
- Не изобретайте заново уже существующую обстановку.
Для настроек,которые являются последовательностями,сам Django использует списки,но это всего лишь соглашение.
Использование настроек без установки DJANGO_SETTINGS_MODULE
В некоторых случаях вы можете обойти переменную окружения DJANGO_SETTINGS_MODULE . Например, если вы используете систему шаблонов отдельно, вы, вероятно, не захотите настраивать переменную среды, указывающую на модуль настроек.
В этих случаях вы можете настроить параметры Django вручную.Сделайте это,вызвав:
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 о том , что параметры уже настроены. Для этого есть свойство:
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() # Теперь этот скрипт или любой импортированный модуль может использовать любую нужную часть Django. from myapp import models
Обратите внимание, что вызов django.setup() необходим только в том случае, если ваш код действительно автономен. При вызове вашим веб-сервером или через django-admin Django сделает это за вас.
django.setup() может быть вызван только один раз.
Поэтому избегайте размещения многократно используемой логики приложения в автономных сценариях, чтобы вам приходилось импортировать из сценария в другое место вашего приложения. Если вы не можете избежать этого, поместите вызов django.setup() внутри блока if :
if __name__ == '__main__': import django django.setup()
Ссылка на настройки Содержит полный список основных и дополнительных настроек приложения.
Django 4.1
Django включает «диспетчер сигналов»,который помогает разобщенным приложениям получать уведомления о действиях,происходящих в других местах фреймворка.