Skip to main content
 首页 » 编程设计

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

2024年10月25日33jiqing9006

我遵循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 时都指定设置文件。我宁愿按照 omouse anser here 中的说明设置 DJANG_SETTINGS_MODULE 环境变量:

让我感到困惑的是在 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 env 变量的推荐方法吗?我是否还需要在我的托管服务器上设置一个类似的文件?我计划使用 PythonAnywhere 进行托管。

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

请您参考如下方法:

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

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