2014-12-01 31 views
0

我的觀點之一取決於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函數實際上是一個上傳函數,我需要它將文件上傳到不同目錄的不同視圖。

回答

0

這不是安全的。檢查您嘗試導入的模塊: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