Django,如何在wsgi.py中使用条件设置模块?

3

我正在为我的Django项目使用设置模块而不是单个设置文件。这意味着在我的wsgi.py文件中,我有类似于以下的内容:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings.prod")os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings.dev")

根据我的环境不同而有所不同。我真的很想能够在配置文件中设置一个变量,这样我就不必每次推送到生产环境时都进入这个文件并进行更改。

你会说这没什么大不了的吗?好吧,很容易忘记,然后我的应用程序会因为运行在开发设置上而变得不安全。我还会在我的应用程序的其他地方使用这个配置变量,所以我只需要一个“全局”标志就可以将我的应用程序设置为生产或开发设置。


为什么每次都要推送你的WSGI文件? - yedpodtrzitko
2个回答

4

那么这种方法如何呢?创建三个设置文件:

  • settings.py(主要)
  • settings_dev.py(覆盖一些开发服务器的设置)
  • settings_prod.py(覆盖一些生产服务器的设置)

settings.py文件的末尾,检查是否DEBUG=True,然后导入settings_dev.py,否则导入settings_prod.py

settings.py:

----
try:
    if DEBUG:
        from settings_dev import *
    else:
        from settings_prod import *
except ImportError:
    pass

使用这种方法,您只需要设置以下内容:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

现在不要说如果我忘记为特定服务器更改DEBUG值怎么办。另一个解决方案是有两个单独的存储库,在开发存储库中将settings_prod.py添加到git忽略列表中,并在生产中将settings_dev.py添加到git忽略列表中。始终在settings_prod.py中设置DEBUG=False,并在settings.py文件中设置DEBUG=True,然后在settings.py文件末尾执行以下操作:
try:
    from settings_dev import *
except ImportError:
    try:
        from settings_prod import *
    except ImportError:
        pass

很酷的解决方案:D 如果我只能有一个设置文件,并且逻辑是如果环境变量为'prod',则使用这些凭据;如果环境变量为'dev',则使用这些凭据,那就太好了。如何设置呢? - Ulf Gjerdingen

0
你也可以使用环境变量(或机器名称或用户名)来区分不同的机器。最好在调试环境中设置它,而在生产环境中永远不要设置,这样就不会被遗忘。大致如此。
if "yes" == os.environ.get("DJANGO_DEBUG_ENABLED"): 
    DEBUG = True
    # or 
    from settings_dev import *
else:
    DEBUG = False
    # or 
    from settings_prod import *

或者您可以在那里放置一个不属于代码仓库的文件,并检查其是否存在/不存在,或从settings_local.py导入DEBUG


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接