Попытка разместить информацию о базе данных 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/

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