Синтаксис envfile. Как должны быть записаны целые числа (например, PORT)

Интересно, одинаковы ли эти конфигурации:

Конфигурация 1:

EMAIL_PORT=587
EMAIL_USE_TLS=True
EMAIL_USE_SSL=None

Конфигурация 2:

EMAIL_PORT='587'
EMAIL_USE_TLS='True'
EMAIL_USE_SSL='None'

settings.py (или просто произвольный файл python):

EMAIL_PORT = os.getenv('EMAIL_PORT')
EMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS')
EMAIL_USE_SSL = os.getenv('EMAIL_USE_SSL')

Получит ли мой, скажем, EMAIL_PORT в settings.py значение 587 или вместо него будет '587', или если EMAIL_USE_TLS вместо него будет получен питонический булеан True или 'True'? Каково предложение по присвоению переменных в envfile? Как обрабатывать такие булевы, целые числа или любые другие нестроковые значения?

Спасибо!

Как упоминается в Python Docs os.getenv всегда будет возвращать str:

ключ, значение по умолчанию и результат являются строками.

(выделено мной)

Для порта вы можете просто сделать следующее:

EMAIL_PORT  = int(os.getenv('EMAIL_PORT'))

Но для булевой функции я бы установил значение 0 или 1 в env, так что вы можете сделать следующее:

Config:

EMAIL_USE_TLS=1

Python:

EMAIL_USE_TLS = bool(int(os.getenv('EMAIL_USE_TLS')))

Оба эти метода полагаются на корректность переменных окружения, поэтому вы можете захотеть добавить обработку ошибок.

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