存储配置详细信息

时间:2012-03-16 11:56:59

标签: python web2py

我有一堆字符串和整数常量,我在我的应用程序的不同位置使用。 我打算将它们放在一个集中的位置,以便将来更容易更改它们。我可以想到以下方法:

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是个好主意吗?我听说它是​​针对每个请求进行评估的。可以在那里设置设置有明显的开销吗?
  • 这两种方法之间是否存在性能差异?
  • 有更好的方法吗?

3 个答案:

答案 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 requestresponsesession对象都是Storage类的实例。

答案 2 :(得分:1)

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

它不是一个模型,而只是所有类型的变量集合,字符串/整数/字母/其他,以及每个需要访问它们的模块中的import settingsfrom settings import *

由于它不是单一模型,因此访问不会产生任何开销。