我是web2py和python的新手。我正在这个框架中编写一个示例博客应用程序。我想将每个控制器方法中调用的业务逻辑拆分为它自己的模块,并发现此示例很有用:
如您所见,您需要导入模块中的对象或通过globals.current设置它们。控制器可以在没有任何导入的情况下引用“db”和“request”实例(例如)。什么样的编码机制使其在控制器中成为可能而不是在其他地方?
答案 0 :(得分:0)
web2py框架在幕后工作中做了大量工作,使所有这些东西都可用。 例如,当你转到像host / app / controller这样的URL时,web2py会调用该控制器(从web2py.py开始),它处理导入web2py模块,提供请求/响应对象等。
然而,置于模块中的内容旨在成为独立的Python代码,不一定特定于web2py。
答案 1 :(得分:0)
找到答案: 看起来web2py的工作原理是通过动态编译控制器和模型和视图的python代码。它在它的特殊“环境”中运行它们 相关的代码片段是:
https://github.com/web2py/web2py/blob/master/gluon/main.py#L205-263 在上面的文件中,查看:build_environment,run_models_in,run_controller_in函数(如下):
在“受限制”的环境中运行python代码: