0

我对 Django 比较陌生,我一直在想的一件事是更改运行项目时将使用的数据库。

默认情况下,DATABASES 'default' 用于运行我的测试项目。但在未来,我希望能够定义一个“生产”数据库配置并让它使用它。

在生产环境中,我将无法“manage.py runserver”,因此无法真正设置设置。

我读了一些关于“路由”数据库以使用另一个数据库的内容,但是有没有一种更简单的方法,这样我就不需要在每次有另一个我想使用的数据库时创建一个新的路由器(例如,我可以进行测试数据库、生产数据库和开发数据库)?

4

3 回答 3

1

您可以在生产环境中使用不同的 settings.py。

或者 - 更简洁一些 - 您可能希望在 settings.py 旁边创建一个文件 settings_local.py ,您可以在其中定义一些特定于当前机器的设置(如 DEBUG、DATABASES、MEDIA_ROOT 等)并执行from settings_local import *在您的通用 settings.py 文件的开头。当然 settings.py 不能覆盖这些导入的设置。

于 2012-08-09T07:21:23.763 回答
1

为什么需要测试数据库?Django 在运行 unittest 之前自动创建测试数据库。而且,数据库路由不适合您的目的,它用于将您的读/写请求路由到不同的数据库。如果您想使用开发数据库,​​请在 中设置一个新DATABASE配置local_settings.py,然后在最后settings.py输入

try:
    from local_settings import *
except ImportError:
    pass
于 2012-08-09T07:22:45.870 回答
0

您无法直接在设置中指定任何内容。我使用的做法是为不同的环境添加额外的设置文件,其中只包含我想要更改的覆盖设置,例如数据库设置或缓存设置。例如,我的项目根应用程序将在开发环境中包含以下文件(注意前导下划线):

...
settings.py
settings_dev.py
_settings_test.py
_settings_prod.py
...

然后在 settings.py 中,我会在开头添加以下代码行:

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

由于我在开发环境中,它只会导入我的 settings_dev 文件,因为其他文件有一个前导下划线。

当我部署到生产或测试环境时,我会重命名相关文件。对于生产:_settings_prod.py-> settings_prod.py,对于测试:_settings_test.py-> settings_test.pysettings_dev.py基本上可以保持原样,因为只有在其他两个失败时才会导入。最后一步,您可以简单地通过结构或其他工具进行自动化部署。织物的一个例子就像run('mv _settings_prod.py settings_prod.py')重命名一样。

于 2012-08-09T07:37:35.127 回答