python web框架——扩展模块的动态路由
Posted
技术标签:
【中文标题】python web框架——扩展模块的动态路由【英文标题】:python web framework -- dynamic routes to extension modules 【发布时间】:2013-06-02 12:14:37 【问题描述】:我正在探索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,扇出:10,深度:3)。
知道这是否可能与瓶子或任何其他 python 框架有关吗?
【问题讨论】:
【参考方案1】: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)
其他很好的例子可以在以下问题的答案中找到
Python: Convert string into function name; getattr or equal? listing all functions in a python module【讨论】:
非常感谢 emcconville。我认为这绝对符合我的需求。以上是关于python web框架——扩展模块的动态路由的主要内容,如果未能解决你的问题,请参考以下文章
基于hi-nginx的web开发(python篇)——动态路由和请求方法