python - 选择要在 Django 中使用的正确设置文件

标签 python django virtualenvwrapper pythonanywhere

我正在遵循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 here 中所述。 :

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

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

此文件仅在生产服务器中使用吗?如果我已经在服务器上定义了 DJANGO_SETTINGS_MODULE 环境变量,会发生什么?

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

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

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

最佳答案

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

带有 local_settings.py 的方法(大多数情况下都保留在存储库之外!)不是最佳实践,应该避免。

关于python - 选择要在 Django 中使用的正确设置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26688128/

相关文章:

Python - 使用许多参数调用 popen

python - 打印功能在继续之前不会打印完整列表

c++ - 如何将 valgrind 与 Python C++ 扩展一起使用?

python - 如何将列表转换为 Flask 模板的类对象

html - 在脚本标签中嵌入 JSON 对象

Django:获取应用程序的所有模型(包括抽象)

ubuntu - 在 Ubuntu 12.04 : Location of virtualenvwrapper. sh 上设置 VirtualenvWrapper?

python 模块不能在 PyCharm 中使用 virtualenv

django - 如何使用 django 让用户在同一页面上登录和注册

python - Scrapy KeyError - 找不到蜘蛛