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存储库中移出

事实上,您是安全的,但不要这样做: