在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.BAR
在my_view
以外的视图中会有正确的值吗?
我在Python 2.7中使用Django 1.4,如果这很重要的话。我的foo
函数实际上是一个上传函数,我需要它将文件上传到不同目录的不同视图。
答
这不是安全的。检查您尝试导入的模块:django.TEST.utils。它被设计用于测试,而不是现场。
如果您覆盖您的设置,则不仅会更改您的其他视图,还会更改您的其他用户。设置是全球性的,应该是不可变的。
我不知道你在做什么模块,但你可以尝试找到你需要改变它们的代码和子类的类,然后根据需要扩展它,或者看看信号是否对你有用。这样你就不会侵入应用程序的功能,但可以根据需要进行扩展。
您可以扩展设置更改会影响其他视图和用户的原因吗?你的意思是说并发进程会共享修改后的设置值吗? – 2014-12-01 22:55:31
https://docs.djangoproject.com/zh/dev/topics/settings/#altering-settings-at-runtime是的,这就是我的意思(在尝试simmilar的同时阅读某处)。 – cdvv7788 2014-12-01 22:59:18