How do you add environment variables to your django project

故事扮演 提交于 2020-01-02 04:35:05

问题


I'm trying to set up my project so that it can use environment variables locally

Ive tried adding it to the end of my activate file and a list of other things. I'm trying to use this

from .base import *

    if os.environ['DJANGO_SERVER_TYPE'] == 'local':
        try:
            from .local import *
        except:
            pass

    if os.environ['DJANGO_SERVER_TYPE'] == 'production':
        try:
            from .production import *
        except:
            pass

I am a real novice and often things are explained brief and matter of factly. So a thorough explanation would really be beneficial to me in how to implement this thanks. I've NEVER done anything n Bash. Ive tried doing this

export KEY=VALUE

in the activate file, only for it not to be recognized by the system, and I had to remove it in order to use my local server


回答1:


If you're running it through the Django web server, you can pass environment variables the same way you would to any other command:

DJANGO_SERVER_TYPE="local" ./manage.py runserver

If you're running it through a web server like Apache, you can set environment variables through your virtual host configuration:

SetEnv DJANGO_SERVER_TYPE local



回答2:


Install the environ library and add the following code to your settings file:

root_path = environ.Path(__file__) - 2
env = environ.Env(DEBUG=(bool, False), DJANGO_ENV=(str, 'dev')) # set default    values and casting
environ.Env.read_env(root_path('.env')) 

Add a file called .env on the root of your project folder with variables formatted like:

DEBUG=on    



回答3:


I have a settings module that contains something like the following:

…
import os
from django.core.exceptions import ImproperlyConfigured
…

def _require_env(name):
    """Raise an error if the environment variable isn't defined"""
    value = os.getenv(name)
    if value is None:
        raise ImproperlyConfigured('Required environment variable "{}" is not set.'.format(name))
    return value

…

SECRET_KEY = _require_env('SOMETHING_SECRET_KEY')

_db_host = os.getenv('SOMETHING_MYSQL_HOST', 'mysql')
_db_port = os.getenv('SOMETHING_MYSQL_PORT', 3306)   
_db_name = _require_env('SOMETHING_MYSQL_DATABASE')         
_db_user = _require_env('SOMETHING_MYSQL_USER')             
_db_password = _require_env('SOMETHING_MYSQL_PASSWORD')

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql',
                     'NAME': _db_name,                    
                     'HOST': _db_host,                    
                     'PORT': _db_port,                    
                     'USER': _db_user,                    
                     'PASSWORD': _db_password,
    … } }

and so on.

_require_env is for environment variables that must be set. If those environment values are not found, Django immediately raises an ImproperlyConfigured error. In other cases I just use os.getenv with a default value.



来源:https://stackoverflow.com/questions/37473108/how-do-you-add-environment-variables-to-your-django-project

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!