【问题标题】:Pointer-like behaviour in PythonPython 中类似指针的行为
【发布时间】:2013-09-19 08:09:20
【问题描述】:

我有两个模块。一个是基于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。我可以将类定义称为addon.Page 而不是简单的PagePage.GET 函数仍然运行良好……但是 POST 存在一个问题。似乎在核心模块中每次调用 POST 函数 web.input() 时都被设置为存储所有变量的存储对象。如果我的类定义存储在插件中,核心只需调用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 源需要修改?

【问题讨论】:

  • 您能否展示不同模块中的导入内容,以及您担心的全局变量(以及它们如何被初始化)?如果没有更多细节,很难回答您的问题。
  • @Blckknght >你的不同模块中的导入是什么好吧,我不太明白你的问题。 >你担心的全局变量是什么(以及它们如何被初始化)在code.py中我导入web,创建web.app()实例并使用这个实例的run()函数来运行web服务器(在我之后当然,已经为页面定义了所有必要的类)。然后,当 Web 服务器收到 GET 或 POST 请求时,它会将所有 GET 或 POST 变量放在一个存储中,可以从运行 web.app() 的同一主模块调用 web.input() 访问该存储。我知道的就这么多=(
  • 如果web 是一个模块,你应该可以导入它。导入相同其他模块的所有模块都将获得对相同模块对象的引用,因此应该没有值没有显示在它们应该出现的位置的问题。我对 web.py 不是很了解,所以也许还有其他事情发生,但你的问题并没有真正说明什么。您是否尝试过在addon 中导入web
  • 哦,非常感谢!我真的不知道那个参考的东西,相反,我不这么认为,正如你所看到的。非常感谢!

标签: python post web.py


【解决方案1】:

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

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

所以,您可能需要做的就是在 addon.py 模块顶部的 import web

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-05
    • 2017-12-30
    • 2020-03-18
    • 2011-07-11
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 2016-01-18
    相关资源
    最近更新 更多