Настройки 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 и его дополнительных приложений.

Copyright ©2020 All rights reserved