在Django视图中override_settings

问题描述:

我的观点之一取决于foo函数。该功能的行为由设置BAR定义。我有不同的意见,使用foo,其中一个我想foo工作,好像它略有不同。不幸的是,foo处于第三方依赖关系,所以我无法修改它。在Django视图中override_settings

我正在考虑做如下:

from django.test.utils import override_settings 

def my_view(request): 
    with override_settings(BAR="newvalue"): 
     foo() 
    ... 

我知道它的肮脏和粗俗。但是安全吗?我可以假设settings.BARmy_view以外的视图中会有正确的值吗?

我在Python 2.7中使用Django 1.4,如果这很重要的话。我的foo函数实际上是一个上传函数,我需要它将文件上传到不同目录的不同视图。

这不是安全的。检查您尝试导入的模块:django.TEST.utils。它被设计用于测试,而不是现场。

如果您覆盖您的设置,则不仅会更改您的其他视图,还会更改您的其他用户。设置是全球性的,应该是不可变的。

我不知道你在做什么模块,但你可以尝试找到你需要改变它们的代码和子类的类,然后根据需要扩展它,或者看看信号是否对你有用。这样你就不会侵入应用程序的功能,但可以根据需要进行扩展。

+0

您可以扩展设置更改会影响其他视图和用户的原因吗?你的意思是说并发进程会共享修改后的设置值吗? – 2014-12-01 22:55:31

+0

https://docs.djangoproject.com/zh/dev/topics/settings/#altering-settings-at-runtime是的,这就是我的意思(在尝试simmilar的同时阅读某处)。 – cdvv7788 2014-12-01 22:59:18