【问题标题】:Storing Configuration details存储配置详细信息
【发布时间】:2012-03-16 11:56:58
【问题描述】:

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

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 是个好主意吗?我听说它会针对每个请求进行评估。将设置放在那里会产生明显的开销吗?
  • 这两种方法在性能方面有什么区别吗?
  • 有更好的方法吗?

【问题讨论】:

    标签: python web2py


    【解决方案1】:

    您可以直接将您的配置变量放在.py 文件中,并通过在您的模块中导入来使用该文件,因为django 使用了setting.py。如果您想在某些部分基础上组合变量,那么您可以使用ConfigParser,它可以准备好.cfg 文件。

    【讨论】:

      【解决方案2】:

      在任何情况下,您的 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 类的实例。

      【讨论】:

        【解决方案3】:

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

        它不是一个模型,而只是所有类型的变量的集合,strings/ints/dicts/whatever,以及每个需要访问它们的模块中的 import settingsfrom settings import *

        由于它不是单个模型,因此没有访问开销。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-22
          • 2018-08-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多