Django settings.py с дополнительными импортами странное поведение и ошибки электронной почты [Errno 111] / разъяснение лучшей практики

Я заметил некоторое странное поведение Django и надеюсь получить разъяснения о причинах этого. Отчасти это связано с вопросами вроде этого (Ошибка электронной почты Django), но в большей степени касается лучших практик. Посмотрите на следующую установку:

Чтобы не "перегружать" мой settings.py в моем основном приложении, я импортирую дополнительные файлы поднастроек. Моя структура выглядит примерно так:

main_app
-settings.py
...

utils_app
 config
  -settings_email.py
  -settings_something_else.py
  ... 
 utils
  -email.py
  ...
 ...

'email.py' содержит функцию send_email(), а файл settings.py основного приложения импортирует следующим образом: from utils_app.config import settings_email

И settings_email.py будет выглядеть примерно так:

EMAIL_HOST='some-host'
EMAIL_PASS=os.environ.get('EMAIL_PASSWORD')
EMAIL...
...

Изначально эти переменные были в моем (по умолчанию) файле main_app settings.py. Когда это было так, отправка электронной почты через функцию Django 'send_mail' была в порядке. После того, как я переместил их, импортируя, как описано выше, они перестали работать, если я специально не называл их при импорте, например, так: from utils_app.config.settings_email import EMAIL_HOST, ...

В документации Django send_mail я не смог найти ничего, касающегося этого вопроса.

Итак, первый вопрос: действительно ли Django не знает, где искать эти переменные, кроме стандартного settings.py, и они должны быть названы там специально, или они должны быть определены внутри папки main_app? Есть предложения?

И второй вопрос: исходя из этого, что именно является лучшей практикой? Я, вероятно, OCD, когда дело доходит до порядка кода и создания конкретных деклараций там, где им место по группировке и значению, в отдельных файлах config и setting. Я в основном не хочу загружать свой основной settings.py всякой всячиной и предпочитаю разделить все это, если могу.

В этом конкретном примере мое "utils_app" содержит все виды полезных функций, настроек, а также модель для общего ведения домашнего хозяйства с записями в базе данных, которые в основном определяют и направляют специфическое поведение всех остальных моделей приложений. Надеюсь, это имеет смысл. Заранее спасибо, что нашли время прочитать это и за помощь.

PS: Просто уточните. Я, конечно, знаю, что в Python нельзя просто импортировать файл или модуль и ожидать, что определенные в нем переменные будут легко доступны, не обращаясь конкретно к модулю с module.variable или не импортируя каждую переменную явно, как упоминалось выше. Но это не мой вопрос. Мне просто интересно, почему случай A работает лучше, чем случай B, и что на самом деле ищет Django в то время, когда срабатывает send_email().

Вернуться на верх