Python Django设置模块在运行时基于环境以编程方式进行设置
我有一个Python Django设置模块在运行时基于环境以编程方式进行设置,python,django,Python,Django,我有一个dev和prod环境,我试图根据环境变量dev以编程方式分配设置模块,因此我的设置具有以下结构: project --settings ----__init__.py ----common.py ----dev.py ----prod.py 在我的\uuuu init\uuuuuuy.py中,我有: import os if os.environ['DEV_ENV']: os.environ['DJANGO_SETTINGS_MODULE'] = 'project.setti
dev
和prod
环境,我试图根据环境变量dev
以编程方式分配设置模块,因此我的设置具有以下结构:
project
--settings
----__init__.py
----common.py
----dev.py
----prod.py
在我的\uuuu init\uuuuuuy.py
中,我有:
import os
if os.environ['DEV_ENV']:
os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings.dev'
else:
os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings.prod'
但是,当我运行python3 manage.py migrate
时,会出现以下错误:
settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.
但是,如果我手动使用--settings
标志运行,它会工作
python3 manage.py migrate--settings=project.settings.dev
在\uuuu init\uuuu.py
import os
from .common import *
environment = os.environ.get("DEV_ENV")
if environment == development: #assuming value of DEV_ENV is 'development'
from .dev import *
else:
from .prod import *
如果DEV_ENV的值设置为development,这将加载开发设置模块,否则默认情况下,它将加载生产设置模块。您的逻辑应该在
manage.py
脚本中工作
P> >另外,我会考虑设置<代码> DjangoyStutsIsgSudio无论您设置的是代码> DEVYENV<<代码>。
我如何使用它?
我在项目目录中创建了一个.env
文件,我的用例有一个示例模板:
MODE=local
DEBUG=True
DB_NAME=hood
DB_USER=postgres
DB_PASSWORD=abc123
DB_HOST=127.0.0.1
REDIS_HOST=127.0.0.1
SENTRY_DNS={{sentry_dns}}
然后在我的\uuuu init\uuuuu.py
中,我根据这个文件中的值来决定环境
例如:
from decouple import config
mode = config('MODE')
if mode == 'dev':
from .development import *
elif mode == 'prod':
from .production import *
else:
from .local import *
这解决了两个主要目的:
- 它解决了我现在使用的环境的问题
- 它允许您将密码和环境变量从git存储库中移出