-1

我有两个模块。一个是基于 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.pyaddon.py. 我可以将类定义称为 aaddon.Page而不是简单的Page. 该Page.GET功能仍然运行良好...但是 POST 存在一个问题。似乎在web.input()核心模块中每次调用 POST 函数时,都将其设置为存储所有变量的存储对象。如果我的类定义存储在插件中,核心只是调用addon.Page.POST()(我看不到改变这种行为的方法)。POST()尝试获取...并且失败,web.input()当然 -web没有导入addon.py,即使它是,也不会有任何价值web.pyweb-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源需要修改?

4

1 回答 1

1

我想我会把我的评论变成答案,因为它似乎已经解决了你的问题。

导入的模块缓存在 Python 中。这意味着,当您从多个其他模块导入类似web(主 web.py 模块)之类的模块时,它们都将获得相同的模块对象,具有相同的内容。

因此,您可能需要做的就是import webaddon.py模块的顶部。

于 2013-09-14T22:23:01.813 回答