Настройки Django ¶
Файл настроек Django содержит всю конфигурацию для вашей установки Django. В этом документе объясняется, как работают настройки и какие настройки доступны.
Основы ¶
Файл настроек - это просто модуль Python с переменными уровня модуля.
Вот несколько примеров настроек:
ALLOWED_HOSTS = ['www.example.com']
DEBUG = False
DEFAULT_FROM_EMAIL = '[email protected]'
Заметка
Если вы установите 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 для mod_wsgi для получения дополнительной информации и других вещей, общих для любого приложения WSGI Django.
Настройки по умолчанию ¶
Файл настроек Django не обязан определять настройки, если нет известных потребностей. Каждый параметр имеет логическое значение по умолчанию. Эти значения по умолчанию можно найти в модуле django/conf/global_settings.py
.
Вот алгоритм, используемый Django для компиляции настроек:
- Загрузить настройки из
- Загрузить настройки из текущего файла настроек, при необходимости перегрузив глобальные настройки.
Обратите внимание, что файл настроек не следует импортировать global_settings
, так как это будет лишним.
Просмотр измененных настроек ¶
Команда отображает различия между текущим файлом настроек и настройками по умолчанию Django.python manage.py diffsettings
Чтобы узнать больше, прочтите документацию по 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, но следуйте этим рекомендациям:
- Названия настроек должны быть написаны заглавными буквами.
- Не изобретайте заново существующую настройку.
Для настроек типа list сам Django использует списки Python, но это всего лишь соглашение.
Использование настроек без настройки DJANGO_SETTINGS_MODULE
¶
В некоторых случаях может потребоваться обойти DJANGO_SETTINGS_MODULE
переменная окружения. Например, если вы используете систему шаблонов отдельно, вам, скорее всего, не нужно настраивать переменную среды, указывающую на модуль настроек.
В этих ситуациях вы можете вручную настроить параметры Django. Сделайте это, позвонив:
-
django.conf.settings.
configure
( default_settings , ** настройки ) ¶
Пример:
from django.conf import settings
settings.configure(DEBUG=True)
Вы можете передать столько параметров, сколько вам нужно configure()
, зная, что каждый именованный параметр будет настройкой со своим значением. Имя каждого параметра должно быть полностью прописным и соответствовать одному из существующих параметров. Если конкретный параметр не передается configure()
и требуется позже в коде, Django использует значение параметра по умолчанию.
Такая настройка Django особенно необходима (и даже рекомендуется) при использовании части инфраструктуры Django в более крупном приложении.
В результате, когда Django настроен с помощью settings.configure()
, он не будет вносить никаких изменений в переменные среды процесса ( TIME_ZONE
почему это происходит обычно, см. В документации ). Затем Django предполагает, что вы уже полностью контролируете свою среду.
Пользовательские настройки по умолчанию ¶
Если вы хотите, чтобы значения по умолчанию поступали не из других источников 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()
# 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()
Смотрите также
- Справочник по настройкам
- Содержит полный список настроек для Django и его дополнительных приложений.