gpt4 book ai didi

python - 如何在 django 项目中导入自定义的 settings.py 变量?

转载 作者:太空宇宙 更新时间:2023-11-03 18:56:34 25 4
gpt4 key购买 nike

我在我的 django 项目中使用客户设置,就像在我的 manage.py 中一样。我写道:

if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "setting.windows")
...

当我运行代码时,我想在不同的设置中运行我的程序,例如:

python manage.py runserver --settings=twoscoops.settings.local

在我的settings.py中我还添加了一些我的私有(private)程序变量,不同的settings.py使用不同的变量。如果我的 models.py 或其他类文件想要导入我的设置文件中定义的那些变量。进口声明怎么写?

我的意思是如果我这样做

import twoscops.settings.local

当我使用其他设置时,我可能会更改环境变量。怎么做?

最佳答案

实现此目的的一个好方法实际上是在操作系统中设置一个环境变量,然后在 environment 内的 Python 代码中检查它。模块(如下图)。

注意:就目录结构而言,使用任何适合你的东西 - 我使用 <my app>/conf/envs/<some env>.py针对特定环境的设置

# twoscoops/conf/envs/current.py
"""
Imports the proper settings, based on the deployment environment's name (set
as an environment variable), defaulting to local settings.
"""
import os

from django.core.exceptions import ImproperlyConfigured


# Environments (these can be called anything you want)
ENV_LOCAL = 'local'
ENV_PROD = 'prod'
DEPLOYMENT_ENVS = (ENV_LOCAL, ENV_PROD)

# Get the deployment environment's name from the os environment
DEPLOYMENT_ENV = os.getenv('DJANGO_DEPLOYMENT_ENV', ENV_LOCAL)

# Ensure the deployment env's name is valid
if DEPLOYMENT_ENV not in DEPLOYMENT_ENVS:
raise ImproperlyConfigured(
u'Invalid `DJANGO_DEPLOYMENT_ENV`: {d}'.format(d=DEPLOYMENT_ENV)
)

# Import env-specific settings

if DEPLOYMENT_ENV == ENV_LOCAL:
# Local, native testing
from twoscoops.conf.envs.local import *

if DEPLOYMENT_ENV == ENV_PROD:
# Production
from twoscoops.conf.envs.prod import *

只需添加 from twosscoops.conf.envs.current import *您的每个主要设置模块(您可能只有一个,或者您可能有一个用于 API,一个用于网站,等等)。

您会注意到上面的示例默认为 twoscoops.conf.envs.local 。当您想使用另一个环境时(在我的示例中,只有 prod 和本地),只需添加 DJANGO_DEPLOYMENT_ENV在启动 shell 或服务器之前(或者在启动 uWSGI 之前在 Upstart 脚本中等)添加环境变量,如下所示:

you@your-server$ export DJANGO_DEPLOYMENT_ENV=prod
you@your-server$ python manage.py shell

在 Windows 中,您也可以设置环境变量(我相信在命令行中也可以通过 GUI - Google 会了解更多)。

关于python - 如何在 django 项目中导入自定义的 settings.py 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17140351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com