代码之家  ›  专栏  ›  技术社区  ›  OrganicPanda

在Cherrypy中,如何在请求之外访问配置?

  •  3
  • OrganicPanda  · 技术社区  · 16 年前

    我有一个在cherrypy上运行的webapp,需要在用户创建请求之前访问cherrypy配置文件。医生说要使用:

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

    但这在用户请求之外是行不通的。当您启动应用程序时,也可以使用应用程序对象,如下所示:

    …
    application=cherrypy.tree.mount(根,“/”,app_-conf)
    主机=application.config['database'][主机]
    …

    但是我看不到从用户请求之外的其他类访问“应用程序”的方法。

    我这样问是因为我们的应用程序会查看几个数据库,并在应用程序启动时设置它们,而不是根据用户的请求。我觉得这在其他地方也很有用;那么有没有任何方法可以将对“应用程序”的引用存储在某个地方或通过cherrypy API访问它?

    2 回复  |  直到 15 年前
        1
  •  1
  •   fumanchu    16 年前

    有没有办法在某个地方存储对“应用程序”的引用…

    只需使用普通的python。对于名为“myapp”的包:

    # __init__.py
    ...
    application = cherrypy.tree.mount(root, '/', app_conf)
    ...
    
    # notarequest.py
    import myapp
    host = myapp.application.config['database']['host']
    

    但是,我建议使用config设置数据库对象,然后检查这些数据库对象,而不是检查config。

        2
  •  3
  •   Martin Pengelly-Phillips    15 年前

    您可以使用脚本名(减去尾随斜杠)通过同一个cherrypy.tree对象访问它:

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

    然而,正如在其他答案中提到的,可能有更好的方法来构造代码。