为什么不应该在运行时更改django设置?

ian*_*man 8 django settings runtime edit

django文档明确指出

您不应在运行时更改应用程序中的设置.

这是该声明链接

我的问题是,为什么会这样呢?我想在运行时动态添加应用程序,并在运行时添加数据库,这两者都涉及编辑设置.有人可以解释为什么不在运行时编辑设置,如果存在例外,它们是哪些设置以及为什么它们是例外?我对如何实现目标并不感兴趣,但是为什么不应该改变设置的原因.

spo*_*key 6

如果在运行时更改它们,则不会重新读取大多数设置.因此Django无法识别您所做的更改.

这是因为Django只是普通的Python代码.它不像监视代码的服务器 - 它只是代码的一部分.

在某些情况下,Django代码的某些部分可能会响应设置中的更改,因为例如,每次发送邮件时它们都可能会执行"settings.DEFAULT_FROM_EMAIL".

但是如果Django以任何方式处理设置,就像它必须为INSTALLED_APPS做的那样,它就不会注意到你改变了一些东西并重新进行处理.

哪些设置安全?好吧,文档说"没有一个是安全的",因为它可能会在未来发生变化.由于某种原因,Django可能会保存任何设置的副本,或者进行一些处理.

更改INSTALLED_APPS永远不会起作用,因为它会改变导入的模块.Django根本没有办法解决Python在这个级别上的工作方式 - 它需要能够'unmport'模块,这基本上是不可能的(唯一的方法是重启过程),还有其他的与跨应用程序链接相关的问题.