来自姜戈docs https://docs.djangoproject.com/en/dev/topics/settings/#altering-settings-at-runtime:
您不应该在运行时更改应用程序中的设置。为了
例如,不要在视图中执行此操作:
from django.conf import settings
settings.DEBUG = True # Don't do this!
您应该分配给设置的唯一位置是在设置文件中。
我注意到 Django 测试代码does https://github.com/django/django/blob/2.0/django/test/utils.py#L125改变设置。为什么在那里做就可以了?
更改设置就可以了吗?
简短回答:
不可以,除非您在启动期间执行此操作。
长答案:
Django 文档是正确的,您不应在运行时修改设置。这意味着应用程序启动后不会修改任何设置,例如更改配置views.py
, serializers.py
, models.py
或您在开发过程中添加的其他模块。但是,如果您在启动时执行此操作并且完全了解会发生什么,则可以修改依赖于局部变量的设置。
测试时可以修改设置吗?
是的,如果您认为需要的话。放心信赖override_settings
要在单元测试中更改设置值以进行测试,请参阅用法示例here https://docs.djangoproject.com/en/4.1/topics/testing/tools/#django.test.override_settings此外,此装饰器所做的一切 - 都是使用提供的值覆盖设置并在测试通过后恢复设置值(执行装饰函数)。
为什么 Django 在测试代码时会修改它们。
据我所知,他们仅出于测试目的更改设置,并且他们所做的唯一一件事就是将本地主机添加到允许的主机,以便他们可以使用本地域测试代码。这样的例子对我来说似乎很合理,因为更改仅在单元测试设置期间完成一次。想象一下有overrride_settings
每次都打电话,那就太可怕了。
一般推荐。
尽量不要这样做,不需要修改设置,如果有的话 - 想想看,也许设置不是可变设置的正确位置?
如果您想在运行时修改设置 - 请注意设置可能会缓存在某个地方,在各处复制和访问 - 这为新错误提供了足够的空间。除了由于修改设置的旧/新值而导致系统出现意外行为之外,它没有什么不好的。
希望这是有道理的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)