【发布时间】:2012-06-09 06:05:11
【问题描述】:
金字塔项目中有一个 development.ini 或 production.ini。我将自己的配置数据添加到 ini 文件如下:
[thrift]
host = 0.0.0.0
port = 8080
我想在项目的一个 py 文件中使用配置数据。 如何在没有请求对象的情况下获取数据? (我见过一个使用请求的解决方案。)
【问题讨论】:
金字塔项目中有一个 development.ini 或 production.ini。我将自己的配置数据添加到 ini 文件如下:
[thrift]
host = 0.0.0.0
port = 8080
我想在项目的一个 py 文件中使用配置数据。 如何在没有请求对象的情况下获取数据? (我见过一个使用请求的解决方案。)
【问题讨论】:
想想“蟒蛇”而不是“金字塔”。
import ConfigParser
config = ConfigParser.ConfigParser()
config.read('development.ini')
db_url = config.get('app:main', 'sqlalchemy.url')
【讨论】:
PasteDeploy。 ConfigParser 不起作用:它不接受在键名中包含 .。
每当我想知道如何在金字塔中做某事时,我通常会参考 github 上的金字塔示例之一。
Parsing Example Pyramid Config
我不知道它们有多“火爆”,但它们通常可以正常工作。在这里,他们只是使用ConfigParser,就像您在任何 python 项目中解析您的 .ini 文件一样
【讨论】:
您可以通过request.registry.settings 或pyramid.threadlocal.get_current_registry().settings 访问设置。它的行为类似于字典。
如果您想使用第二个,即在没有请求的情况下获取设置,我必须警告您。根据the doc:
这个函数应该非常谨慎地使用,通常只在单元中使用 测试代码。使用它几乎总是一个错误 get_current_registry 在测试上下文之外,因为它的使用使得 可以编写既不容易测试也不容易的代码 脚本。
需要访问设置的代码的任何部分都是 Web 应用程序的一部分,并且应该访问请求,而不是一些可以神奇地访问的全局。你可能认为你有充分的理由,但可能有更好的方法。如果您想讨论这个问题(如果它很复杂,可能会在另一个问题中讨论,因为一些代码会有所帮助),我很乐意帮助您找到一种干净的方法。
【讨论】: