如何将环境变量添加到django项目中

时间:2016-05-27 00:41:13

标签: python django bash environment-variables development-environment

我试图设置我的项目,以便它可以在本地使用环境变量

我尝试将其添加到激活文件的末尾和其他内容列表中。我试图使用这个

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

我是一个真正的新手,事实上事情的解释很简短。因此,如何实现这一点,彻底的解释将对我有益。我从来没有做任何事情。我试过这个

export KEY=VALUE

在激活文件中,只是因为它不被系统识别,我不得不将其删除才能使用我的本地服务器

3 个答案:

答案 0 :(得分:4)

如果您通过Django Web服务器运行它,您可以像对待任何其他命令一样传递环境变量:

DJANGO_SERVER_TYPE="local" ./manage.py runserver

如果您通过Apache等Web服务器运行它,则可以通过虚拟主机配置设置环境变量:

SetEnv DJANGO_SERVER_TYPE local

答案 1 :(得分:1)

安装environ库并将以下代码添加到您的设置文件中:

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')) 

在项目文件夹的根目录中添加名为.env的文件,其变量格式为:

DEBUG=on    

答案 2 :(得分:1)

我有一个设置模块,其中包含以下内容:

…
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,
    … } }

等等。

_require_env适用于必须设置的环境变量。如果找不到这些环境值,Django会立即引发ImproperlyConfigured错误。在其他情况下,我只使用os.getenv和默认值。