Python 模式以消除模块中的导入,如web2py控制器中的导入

Python 模式以消除模块中的导入,如web2py控制器中的导入,python,python-2.7,web2py,web2py-modules,Python,Python 2.7,Web2py,Web2py Modules,我对web2py和python都是新手。我正在这个框架中编写一个示例博客应用程序。我想将每个控制器方法中调用的业务逻辑拆分到它自己的模块中,并发现此示例很有用: 如您所见,您需要导入模块中的对象或通过globals.current对其进行设置。控制器可以引用“db”和“request”实例(例如),而无需任何导入。什么样的编码机制可以在控制器中实现,但不能在这里实现 web2py框架做了大量的幕后工作,使所有这些东西都可用。 例如,当您转到诸如host/app/controller之类的

我对web2py和python都是新手。我正在这个框架中编写一个示例博客应用程序。我想将每个控制器方法中调用的业务逻辑拆分到它自己的模块中,并发现此示例很有用:


如您所见,您需要导入模块中的对象或通过globals.current对其进行设置。控制器可以引用“db”和“request”实例(例如),而无需任何导入。什么样的编码机制可以在控制器中实现,但不能在这里实现

web2py框架做了大量的幕后工作,使所有这些东西都可用。 例如,当您转到诸如host/app/controller之类的URL时,web2py(从web2py.py中的某些内容开始)会调用该控制器,该控制器负责导入web2py模块、提供请求/响应对象等

但是,模块中的内容是独立的Python代码,不一定特定于web2py。

找到了答案: 看起来web2py的工作原理是动态编译控制器、模型和视图的python代码。它在特殊的“环境”中运行它们 相关的代码片段包括:

  • 在上面的文件中,查看:build_environment、run_models_In、run_controller_In函数(如下所示):

    它们在“受限”环境中运行python代码:


它是如何做到这一点的——即编码机制?(这可能与python更相关,或者如果您可以指向web2py源代码中的特定代码行,这可能也会有所帮助)我这样问是因为控制器函数不带参数。“请求”、“数据库”等对象神奇地出现了