Spec-Zone.ru › Django 2.2

Настройки 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 mod_wsgi и других распространенных элементах приложения 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, указывая, что настройки уже были сконфигурированы. Для этой цели есть свойство:

Например:

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 Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/2.2/topics/settings/

Spec-Zone.ru

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