2012-03-16 138 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文件。