存储配置详细信息
我有一堆字符串和整数常量,我在我的应用程序的各个地方使用。 我打算将它们放在一个集中的位置,以便将来更改它们更容易。我能想到以下方法:存储配置详细信息
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
是个好主意吗?我听说它会针对每个请求进行评估。可以把设置放在那里有明显的开销? - 这两种方法在性能上有什么不同吗?
- 有没有更好的方法来做到这一点?
在任何情况下,您的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的request
,response
和session
对象是的所有实例班。
例如,Django使用文件settings.py。
它不是一个模型,而是所有类型的变量的集合,字符串/整数/字典/其他,以及在需要访问它们的每个模块中的import settings
或from settings import *
。
由于它不是一个单一的模型,所以没有访问开销。
您可以直接将您的配置变量放在.py
文件中,并通过导入模块使用该文件,因为django使用的是setting.py
。如果你想在某些节的基础上组合变量,那么你可以使用ConfigParser
,这可以准备.cfg
文件。