我有两个模块。一个是基于 web.py 的网站核心(我们命名它code.py
),另一个是附加模块(addon.py
)。使用 web.py,对于网站服务器的每个页面,核心中都应该有类定义,如下所示:
class Page:
def GET(self):
variable = "Hello!"
return render.page_template(variable) #Here, it returns the rendered template to user
def POST(self):
post_variables = web.input()
pass #Doing something with those variables, maybe, writing in a database...
现在我真的需要将该类定义从 移动code.py
到addon.py
. 我可以将类定义称为 aaddon.Page
而不是简单的Page
. 该Page.GET
功能仍然运行良好...但是 POST 存在一个问题。似乎在web.input()
核心模块中每次调用 POST 函数时,都将其设置为存储所有变量的存储对象。如果我的类定义存储在插件中,核心只是调用addon.Page.POST()
(我看不到改变这种行为的方法)。POST()
尝试获取...并且失败,web.input()
当然 -web
没有导入addon.py
,即使它是,也不会有任何价值web.py
web-server 正在获取 - 只是空字典,它只是模块的另一个实例. 所以我不知道...
一种解决方案是:在addon.Page.POST()
. 该函数将向下一层,到code.py
并执行web.input(
),然后将其返回到addon.py
某种访问父模块名称空间(如执行import __main__
和访问__main__.web.input()
(据我所知,不鼓励这样做))。
或者,例如,放置某种将在模块之间共享的类似 C 的指针,例如:
* 在code.py
定义中,所有调用code.addon.web_input()
都路由到 code.web.input()
* 在addon.py
- 只需要调用addon.web_input
从获取信息code.web.input()
在这种情况下我该怎么办?会有多个插件,每个插件都有存储在这个插件中的类定义,我应该能够添加新模块,轻松连接和断开现有模块,而无需修改code.py
. 我相信这在 Python 中是可能的......也许web.py
源需要修改?