Настройки 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()
Смотрите также
- Справочник по настройкам
- Содержит полный список основных и дополнительных настроек приложения.