Попытка разместить информацию о базе данных postgresql внутри файла dotenv, чтобы скрыть важную информацию, например, пароли и т.д.
Я использую фреймворк django rest и пытаюсь подключить базу данных postgresql. Если у меня соединение с базой данных явно прописано в файле settings.py
, то выполнение python manage.py runserver
работает нормально, но как только я заменяю соединение с базой данных значениями dotenv, соединение разрывается. Как мне это исправить?
example
Это работает нормально
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'ticketdb',
'USER': 'postgres',
'PASSWORD': 'pretendmyrealpasswordishere',
'HOST': 'localhost',
}
}
Это не делает и выбрасывает эту ошибку.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.environ.get('DB_NAME'),
'USER': os.environ.get('DB_USER'),
'PASSWORD': os.environ.get('DB_USER_PASSWORD'),
'HOST': os.environ.get('DB_HOST'),
'PORT': os.environ.get('DB_PORT'),
}
}
Traceback
- Вариант 1:
python-decouple
пакет
pip install python-decouple
В вашем файле settings.py:
from decouple import config
Доступ к переменным окружения в виде:
NAME = config("DB_NAME")
Официальная документация: https://github.com/henriquebastos/python-decouple/
- Вариант 2:
python-dotenv
пакет
pip install python-dotenv
В вашем файле settings.py:
from dotenv import load_dotenv
load_dotenv()
Доступ к переменным окружения в виде:
NAME = os.getenv("DB_NAME")
Официальная документация: https://saurabh-kumar.com/python-dotenv/