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

Настройки по умолчанию

В файле настроек Django нет необходимости определять какие-либо настройки, если это не нужно. У каждой настройки есть разумное значение по умолчанию. Эти значения по умолчанию сохраняются в модуле django/conf/global_settings.py.

Вот алгоритм, который Django использует при компиляции настроек:

  • Загрузить настройки из global_settings.py.
  • Загрузите настройки из указанного файла настроек, при необходимости переопределив глобальные настройки.

Обратите внимание, что файл настроек не следует импортировать из 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, но следуйте этим рекомендациям:

  • Имена настроек должны быть полностью прописными.
  • Не изобретайте заново уже существующий сеттинг.

Для настроек, являющихся последовательностями, сам Django использует списки, но это всего лишь соглашение.

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

Следовательно, при настройке с помощью 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()

Смотрите также

Справочник по настройкам
Содержит полный список основных и дополнительных настроек приложения.

Copyright ©2021 All rights reserved