- Настройки Django¶
- Основы¶
- Назначение настроек¶
- Утилита django-admin ¶
- На сервере ( mod_wsgi )¶
- Настройки по умолчанию¶
- Просмотр настроек, которые вы изменили¶
- Использование настроек в коде Python¶
- Изменение настроек во время выполнения¶
- Безопасность¶
- Доступные настройки¶
- Создание собственных настроек¶
- Использование настроек без установки DJANGO_SETTINGS_MODULE ¶
- Пользовательские настройки по умолчанию¶
- Требуется либо configure() , либо DJANGO_SETTINGS_MODULE ¶
- Вызов django.setup() необходим для «автономного» использования Django¶
Настройки 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, вы должны сообщить ему, какие настройки вы используете. Для этого используется переменная окружения DJANGO_SETTINGS_MODULE .
Значение DJANGO_SETTINGS_MODULE должно быть в синтаксисе пути Python, например, mysite.settings . Обратите внимание, что модуль настроек должен находиться на Python import search path.
Утилита 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 для указания настроек вручную:
django-admin runserver --settings=mysite.settings
На сервере ( mod_wsgi )¶
В среде живого сервера вам нужно будет указать приложению WSGI, какой файл настроек использовать. Сделайте это с помощью команды os.environ :
import os os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
Читайте Django mod_wsgi documentation для получения дополнительной информации и других общих элементов для WSGI-приложения Django.
Настройки по умолчанию¶
Файл настроек 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!
Единственное место, куда следует назначать настройки, — это файл настроек.
Безопасность¶
Поскольку файл настроек содержит конфиденциальную информацию, такую как пароль базы данных, вы должны предпринять все попытки ограничить доступ к нему. Например, измените права доступа к файлу так, чтобы его могли читать только вы и пользователь вашего веб-сервера. Это особенно важно в среде общего хостинга.
Доступные настройки¶
Полный список доступных настроек см. в разделе settings reference .
Создание собственных настроек¶
Ничто не мешает вам создавать свои собственные настройки для своих 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)
Normally, you will not need to override the defaults in this fashion. The Django defaults are sufficiently tame that you can safely use them. Be aware that if you do pass in a new default module, it entirely replaces the Django defaults, so you must specify a value for every possible setting that might be used in the code you are importing. Check in django.conf.settings.global_settings for the full list.
Требуется либо 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()
The Settings Reference Содержит полный список настроек основных и дополнительных приложений.