2

我正在遵循 Django 的两个勺子中的方法:Django 1.6关于多个设置文件的最佳实践。我正在使用 Django 1.7 和 virtualenvwrapper。

我的设置如下:

project/
    app1/
    app2/
    project/
        __init__.py
        settings/
            __init__.py
            base.py
            local.py
            production.py
    manage.py

对于 Django 如何知道要使用哪个设置文件,我有点困惑。我不想在每次运行 manage.py 时都指定设置文件。我宁愿设置DJANG_SETTINGS_MODULE环境变量,如 omouse anser 中所述:

令我困惑的是 wsgi.py 文件中有一行:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings.production")

这个文件只在生产服务器中使用吗?如果我已经在服务器上定义了 DJANGO_SETTINGS_MODULE 环境变量会怎样?

在本地运行时,我知道每次打开控制台时都需要设置 DJANGO_SETTINGS_MODULE 环境变量。我在这里读到我可以在 virtualenvwrapper 中定义一个 postactivate 钩子。然后,此挂钩将创建我每次激活环境时所需的环境变量。

这是确保在我的本地计算机上加载正确的 DJANGO_SETTINGS_MODULE 环境变量的推荐方法吗?我是否还需要在我的托管服务器上设置一个类似的文件?我打算使用 PythonAnywhere 进行托管。

最后,如果我运行一个登台服务器,我将如何告诉 Django 加载登台设置文件?登台服务器实际上与生产服务器相同,所以我想登台服务器需要一个不同的 wsgi.py 文件,但这似乎是一种反模式。

4

1 回答 1

2

os.environ.setdefault仅在未设置时才设置值。在生产中运行时,导出环境变量DJANGO_SETTINGS_MODULE并将其设置为生产/暂存设置文件,并且在开发中运行时无需设置任何内容(如果您将其默认设置为开发设置)。这是 DRY-est 方法。

带有 a 的方法local_settings.py(大多数时候都被排除在 repo 之外!)不是最佳实践,应该避免。

于 2014-11-01T10:09:45.167 回答