如何在CherryPy中请求外部访问配置?
我有一个在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']
不过,我建议你使用配置来设置你的数据库对象,然后检查那些数据库对象,而不是直接检查配置。