我有一堆字符串和整数常量,我在我的应用程序的不同位置使用。 我打算将它们放在一个集中的位置,以便将来更容易更改它们。我可以想到以下方法:
1)将它们作为单个变量存储在模型db.py
settings_title = "My Amazing App"
settings_ver = 2.0
settings_desc = "Moar and Moar cats"
2)将它们作为dict存储在db.py
settings = { "title": "My Amazing App",
"ver" = 2.0,
"desc" = "Moar and Moar cats"
}
db.py
是个好主意吗?我听说它是针对每个请求进行评估的。可以在那里设置设置有明显的开销吗?答案 0 :(得分:5)
您可以直接将您的配置变量放在.py
文件中,然后在django使用setting.py
的模块中导入该文件。如果要在某些部分基础上组合变量,则可以使用ConfigParser
来准备.cfg
文件。
答案 1 :(得分: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 request
,response
和session
对象都是Storage
类的实例。
答案 2 :(得分:1)
它不是一个模型,而只是所有类型的变量集合,字符串/整数/字母/其他,以及每个需要访问它们的模块中的import settings
或from settings import *
。
由于它不是单一模型,因此访问不会产生任何开销。