2012-03-16 126 views
3

我有一堆字符串和整數常量,我在我的應用程序的各個地方使用。 我打算將它們放在一個集中的位置,以便將來更改它們更容易。我能想到以下方法:存儲配置詳細信息

1)它們作爲單個變量,存儲在模型db.py

settings_title = "My Amazing App" 
settings_ver = 2.0 
settings_desc = "Moar and Moar cats" 

2)讓他們作​​爲一個字典,存放在db.py

settings = { "title": "My Amazing App", 
    "ver" = 2.0, 
    "desc" = "Moar and Moar cats" 
} 
  • 使用型號db.py是個好主意嗎?我聽說它會針對每個請求進行評估。可以把設置放在那裏有明顯的開銷?
  • 這兩種方法在性能上有什麼不同嗎?
  • 有沒有更好的方法來做到這一點?

回答

4

在任何情況下,您的db.py模型文件都將在每個請求中執行,因此向代碼添加一些設置分配將會增加可忽略的開銷。爲了更好的組織,您可以考慮創建一個單獨的模型文件,而不是將這些設置放在db.py中。請注意,模型文件按字母順序執行,因此如果必須在後續模型文件中提供設置,請將設置文件命名爲0_settings.py,以確保它在任何其他模型文件之前執行。

如果您願意,也可以將設置放入應用程序的/ modules文件夾中的模塊(例如settings.py)中,並將設置對象導入應用程序代碼中的任何地方(在這種情況下,模塊只會由解釋器加載一次)。但是,如果需要根據傳入請求動態設置任何設置,那麼最好將設置保存在模型文件中。

最後,您可能會考慮使用web2py Storage對象,它就像字典,但允許您將值作爲屬性訪問,並返回None而不是KeyError,如果您嘗試訪問鍵/屬性不存在:

from gluon.storage import Storage 
settings = Storage() 
settings.title = 'My Amazing App' 

settings = Storage({'title': 'My Amazing App'}) 

注意,web2py的requestresponsesession對象是的所有實例班。

1

例如,Django使用文件settings.py。

它不是一個模型,而是所有類型的變量的集合,字符串/整數/字典/其他,以及在需要訪問它們的每個模塊中的import settingsfrom settings import *

由於它不是一個單一的模型,所以沒有訪問開銷。

5

您可以直接將您的配置變量放在.py文件中,並通過導入模塊使用該文件,因爲django使用的是setting.py。如果你想在某些節的基礎上組合變量,那麼你可以使用ConfigParser,這可以準備.cfg文件。