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