Настройки с дефолтными значениями будут иногда попросту забывать заполнить, поэтому дефолтные значения должны быть безопасными - в этом их смысл.


Пример 1

DEBUG по умолчанию должен быть False. Это спасёт программиста, если он забудет указать эту настройку на prod-сервере.

Плохо:


from environs import Env


def main():
    env = Env()
    env.read_env()

    DEBUG = env.bool(DEBUG, True)

Хорошо:


from environs import Env


def main():
    env = Env()
    env.read_env()

    DEBUG = env.bool(DEBUG, False)


Пример 2

Настройка SECRET_KEY — это секретный ключ, с помощью которого шифруют пароли пользователей сайта. Если SECRET_KEY попадёт не в те руки, то под угрозой взлома окажутся пароли всех пользователей сайта. Доверить ключ можно только администратору сервера: он спрячет ключ на сервере и сообщит его сайту при запуске через переменную окружения. SECRET_KEY не должен иметь никаких default настроек. Так мы предотвратим риск утечки default значения в случае, если забудем указать SECRET_KEY при запуске приложения.

Плохо:


from environs import Env


def main():
    env = Env()
    env.read_env()

    SECRET_KEY = env.str('SECRET_KEY', 'value_if_secret_key_is_empty')

Хорошо:


from environs import Env


def main():
    env = Env()
    env.read_env()

    SECRET_KEY = env.str('SECRET_KEY')