如何在CherryPy中请求外部访问配置?

3 投票
2 回答
2400 浏览
提问于 2025-04-15 23:17

我有一个在CherryPy上运行的网页应用,它需要在用户发起请求之前访问CherryPy的配置文件。文档上说可以这样做:

host = cherrypy.request.app.config['database']['host']

但是在用户请求之外,这样做是行不通的。你也可以在启动应用的时候使用应用对象,像这样:

...
application = cherrypy.tree.mount(root, '/', app_conf)
host = application.config['database']['host']
...

但我发现没有办法在用户请求之外的其他类中访问到'application'。

我之所以这样问,是因为我们的应用需要查看多个数据库,而我们是在应用启动时就设置好这些数据库,而不是等用户请求时再设置。我觉得这在其他地方也会有用;那么有没有办法把'application'的引用存储到某个地方,或者通过CherryPy的API来访问它呢?

2 个回答

2

你可以通过同一个 cherrypy.tree 对象,使用脚本名称(去掉最后的斜杠)来访问它:

application = cherrypy.tree.apps['']
host = application.config['database']['host']

不过,正如其他回答提到的,可能有更好的方法来组织你的代码。

0

有没有办法把'application'的引用存储在某个地方...

只需使用普通的Python。对于一个叫'myapp'的包:

# __init__.py
...
application = cherrypy.tree.mount(root, '/', app_conf)
...

# notarequest.py
import myapp
host = myapp.application.config['database']['host']

不过,我建议你使用配置来设置你的数据库对象,然后检查那些数据库对象,而不是直接检查配置。

撰写回答