如何将环境变量添加到 Django 项目中
How do you add environment variables to your django project
我正在尝试设置我的项目,以便它可以在本地使用环境变量
我试过将它添加到我的激活文件和其他列表的末尾。我正在尝试使用这个
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
我是一个真正的新手,通常情况下,事情会被简单而事实地解释。因此,彻底的解释对我如何实施这一感谢真的很有帮助。我从来没有做过任何事情 n Bash。我试过这样做
export KEY=VALUE
在activate文件中,只为系统无法识别,为了使用我的本地服务器,我不得不删除它
安装 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
如果您 运行 通过 Django 网络服务器,您可以像传递给任何其他命令一样传递环境变量:
DJANGO_SERVER_TYPE="local" ./manage.py runserver
如果您运行它是通过像 Apache 这样的 Web 服务器,您可以通过虚拟主机配置来设置环境变量:
SetEnv DJANGO_SERVER_TYPE local
我有一个包含如下内容的设置模块:
…
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
和默认值。
我正在尝试设置我的项目,以便它可以在本地使用环境变量
我试过将它添加到我的激活文件和其他列表的末尾。我正在尝试使用这个
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
我是一个真正的新手,通常情况下,事情会被简单而事实地解释。因此,彻底的解释对我如何实施这一感谢真的很有帮助。我从来没有做过任何事情 n Bash。我试过这样做
export KEY=VALUE
在activate文件中,只为系统无法识别,为了使用我的本地服务器,我不得不删除它
安装 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
如果您 运行 通过 Django 网络服务器,您可以像传递给任何其他命令一样传递环境变量:
DJANGO_SERVER_TYPE="local" ./manage.py runserver
如果您运行它是通过像 Apache 这样的 Web 服务器,您可以通过虚拟主机配置来设置环境变量:
SetEnv DJANGO_SERVER_TYPE local
我有一个包含如下内容的设置模块:
…
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
和默认值。