Создание переменной среды .env для Django на Windows / Linux
avatar
7 | (offline)
❤️‍🔥Notehunter Developer
Добавлено:
Категория: Решения «Django»
Комментариев: 0

В этом руководстве Django мы рассмотрим создание переменной среды для хранения паролей, ключей и других конфиденциальных объектов, а также будем запускать эту переменную среду на Windows

Предисловие

Сам Python работать с переменными средами может, есть встроенный модуль os, у которого есть метод environ.get(). Но допустим вы подготовили Django проект к деплою, и необходимые параметры в settings.py зашифровали в os.environ.get('ExampleKey'), и тут хотите запустить все на вашем компьютере с Windows в IDE PyCharm, как сталкиваетесь с ошибками:

File "C:\Users\Razilator\Desktop\Projects\notehunter\backend\engine\settings.py", line 29, in <module>
    ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS').split()
AttributeError: 'NoneType' object has no attribute 'split'

Ошибка эта появляется, потому что значение ALLOWED_HOSTS - пустое, хотя в файле .env мы все добавляли, да и на VDS все работает как надо. Оно не читается с помощью Windows.

.env

ALLOWED_HOSTS=127.0.0.1

Создание .env и подключение

Чтобы наш .env работал везде, где мы захотим: Windows, Linux, и т.д., нам необходимо установить модуль django-environ

Для этого в терминале установим django-environ:

pip install django-environ

Результат установки:

(venv) PS C:\Users\Razilator\Desktop\Projects\Courses\App\backend> pip install django-environ
Collecting django-environ
  Downloading django_environ-0.9.0-py2.py3-none-any.whl (17 kB)
Installing collected packages: django-environ
Successfully installed django-environ-0.9.0

Отлично. Мы установили его. Давайте взглянем на примерный .env файл для локальной машины.

Я расположил файл .env.local в папке docker/env/env.local. Вы можете расположить его в любом другом месте.

docker/env/env.local:

DJANGO_SECRET_KEY=django-insecure-e5wl)ln9l6f2dwsv2xt*2=*nez(bq7qj5c(2m1bcbojxlql_jy
DJANGO_DEBUG=0
CSRF_TRUSTED_ORIGINS=http://127.0.0.1
ALLOWED_HOSTS=127.0.0.1
POSTGRES_USER=postgres
POSTGRES_PASSWORD=root
POSTGRES_DB=ExampleDB
POSTGRES_HOST=127.0.0.1
POSTGRES_PORT=5432
CELERY_BROKER_URL=redis://127.0.0.1:6379/0
CELERY_RESULT_BACKEND=redis://127.0.0.1:6379/0
REDIS_LOCATION=redis://127.0.0.1:6379/1
RECAPTCHA_PUBLIC_KEY=6Cc3Z1AhAAAAACf7fNueWxIXWjH117-vgbXGyykB
RECAPTCHA_PRIVATE_KEY=6Cc3Z1AhAAAAAAOjLoGOWA_kljGQaYO2CXGDt0ro
EMAIL_HOST=ad.notehunter@yahoo.com
EMAIL_PORT=465
EMAIL_USE_SSL=1
EMAIL_HOST_USER=smtp.mail.yahoo.com
EMAIL_HOST_PASSWORD=cgigetffshgewq

Вы можете подставить свои значения, какие вам будут необходимы. 

Теперь я перейду в файл settings.py для настройки виртуального окружения:

import environ

env = environ.Env()

environ.Env.read_env(env_file=Path('docker/env/.env.local'))

Пояснение:

  • В env_file я добавляю Path('путь к файлу env')

И теперь, где мне необходимо изменить значения на конфиденциальные, ключи, пароли в settings.py:

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = env('DJANGO_SECRET_KEY')

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = int(env('DJANGO_DEBUG', default=0))

ALLOWED_HOSTS = env('ALLOWED_HOSTS').split()

CSRF_TRUSTED_ORIGINS = env('CSRF_TRUSTED_ORIGINS').split()

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': env('POSTGRES_DB'),
        'USER': env('POSTGRES_USER'),
        'PASSWORD': env('POSTGRES_PASSWORD'),
        'HOST': env('POSTGRES_HOST'),
        'PORT': env('POSTGRES_PORT'),
    }
}

EMAIL_HOST = env('EMAIL_HOST')
EMAIL_PORT = env('EMAIL_PORT')
EMAIL_USE_SSL = int(env('EMAIL_USE_SSL', default=1))

EMAIL_HOST_USER = env('EMAIL_HOST_USER')
EMAIL_HOST_PASSWORD = env('EMAIL_HOST_PASSWORD')

RECAPTCHA_PUBLIC_KEY = env('RECAPTCHA_PUBLIC_KEY')
RECAPTCHA_PRIVATE_KEY = env('RECAPTCHA_PRIVATE_KEY')

CELERY_BROKER_URL = env('CELERY_BROKER_URL')
CELERY_RESULT_BACKEND = env('CELERY_RESULT_BACKEND')

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.redis.RedisCache',
        "LOCATION": env('REDIS_LOCATION'),
    }
}

 И запущу проект через кнопку запуска в PyCharm:

И как видите, сервер успешно запущено с переменными из нашей переменной среды!

Теги записи: Python, Django,
Комментарии к статье 0
Комментариев нет
Форма добавления комментария (необходима регистрация)