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

时间:2014-06-12 15:41:16

标签: python django

我为django项目使用设置模块而不是单个设置文件。这意味着在我的wsgi.py文件中我有这样的东西:

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

取决于我的环境。我真的希望能够在配置文件中设置一个变量,这样我就不必每次进入prod时都进入这个文件并进行更改。

你说的没什么大不了的?好吧,它很容易忘记,然后繁荣我的应用程序是不安全的,因为它在开发设置。我也会在我的应用程序的其他地方使用这个配置变量,所以我有一个" global"将我的应用程序设置为生产或开发设置的标志。

2 个答案:

答案 0 :(得分:3)

这种方法怎么样,创建三个设置文件:

  • settings.py(master)
  • 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值,该怎么办?然后另一个解决方案是有两个单独的存储库在开发存储库的git ignore列表中添加settings_prod.py,并在git ignore list中添加settings_dev.py以进行生产。始终在DEBUG=Falsesettings_prod.py DEBUG=True文件中设置settings.py,然后在settings.py文件末尾设置:

try:
    from settings_dev import *
except ImportError:
    try:
        from settings_prod import *
    except ImportError:
        pass

答案 1 :(得分:0)

您还可以使用环境变量(或机器或用户名)来区分不同的计算机。最好将它设置在debug-one上,而不是在生产中,因此不能忘记。

if "yes" == os.environ.get("DJANGO_DEBUG_ENABLED"): 
    DEBUG = True
    # or 
    from settings_dev import *
else:
    DEBUG = False
    # or 
    from settings_prod import *

或者,您可以在其中放置一个不属于存储库的文件,并检查其存在/不存在,或从DEBUG导入settings_local.py