1

我正在探索python的bottle web框架的使用。Web 应用程序必须是可扩展的。也就是说,我将有一个类似“some/path/extensions/”的文件夹,未来的开发人员应该能够在其中放置此应用程序的扩展。例如:如果扩展名为“treelayout”(具有自己的一组 html 文件、js 文件等,这些文件将放在 .../.../extensions/treelayout/ 文件夹中。我的目标是拥有一个看起来像这样的 url 路由器:

@GET("/some/path/extensions/:module/:func/:params")
def callmodule(module, func, params):
    #D = dictionary made out of variable number of params.
    #Then call module.func(D)  <== How can I do this given that module and func are strings?

例如,有人可以调用“h++p: //.../treelayout/create/maxnodes/100/fanout/10/depth/3”,这将调用新的扩展 treelayout.create( {maxnodes:100, fanout :10,深度:3})。

知道这是否可能与瓶子或任何其他 python 框架有关吗?

4

1 回答 1

0

Python 语言可以将字符串变量映射到加载的模块和方法。

import sys 

@GET("/some/path/extensions/:module/:func/:params")
def callmodule(module, func, params):
    D = dict(params)
    # Pull module instance from systems stack
    moduleInstance = sys.modules[module]
    # Grab method from module
    functionInstance = getattr(moduleInstance,func)
    # Pass "D" variable to function instance
    functionInstance(D)

其他很好的例子可以在以下问题的答案中找到

于 2013-06-02T12:57:05.243 回答