Spec-Zone.ru › Django 6.0

Настройки 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. Обратите внимание, что модуль настроек должен находиться в sys.path 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, в вызов configure() можно передать модуль или класс, предоставляющий настройки по умолчанию, в качестве аргумента default_settings (или первого позиционного аргумента).

В этом примере настройки по умолчанию берутся из 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 необходимо вызвать django.setup()

Если вы используете компоненты 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/6.0/topics/settings/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API