如何在web.py中的请求之间保留变量值

时间:2011-09-22 09:39:05

标签: python variables web.py python-requests

我想在请求到来时立即更新日志文件。我有一个类变量event_logging_enabled,它初始化为TRUE。在POST()函数中,我检查event_logging_enabled的值。

现在,在运行时,我将此标志的值修改为FALSE以用于后续请求。但它仍然是真的。

在调试过程中,我发现当收到请求时,会创建一个新对象来处理每个请求,因此,将选择初始值ieTRUE。

对于同一类的getlogEnabled()等其他函数,情况并非如此。 你能否提出任何建议。

import web
import threading

class webServer(threading.Thread):
    port = "1234"
    event_logging_enabled  = "True"

    def getlogEnabled(self):
        print "Stub getlogEnabled(): ",self.event_logging_enabled

    def __init__(self):
        threading.Thread.__init__(self) 
        """ Logging """
        print "Init------------------------",self.event_logging_enabled
        self.event_logging_filename = "ueLogs.log"

    def run(self):
        urls = (
        '/','webServer',
        )
        app = web.application(urls,globals())
        sys.argv.append(webServer.port)
        app.run()

    def POST(self):
        print "in POST"
        print "Stub POST(): Logging Enabled : ",self.event_logging_enabled

2 个答案:

答案 0 :(得分:10)

我过去所做的似乎工作正常,如果我需要一个在所有请求中都持久的变量,我会在app.run()

之前将其阻塞到web对象上

例如,如果我想要一个名为'foo'的变量,它在所有请求中共享,并且在请求之间是持久的,我会这样做

web.app = web.application(urls, globals())

# Add my custom foo
web.foo = 'some value'

# Start the app
web.app.run()

然后,如果我需要修改或使用foo变量,在我的代码中我只会

import web

web.foo = 'some other value'

在重新启动应用程序之前,您在启动脚本中阻塞到Web对象上的任何内容都将保持不变。有点黑客,但它确实有效。

答案 1 :(得分:3)

我对web.py框架不是很熟悉,但通常对Web应用程序很熟悉,如果需要在多个请求中保留状态,则必须使用会话对象来管理它。会话对象可以为每个Web用户分开,也可以为整个应用程序共用。

web.py框架中有一个会话对象: http://webpy.org/docs/0.3/api#web.session

它允许您决定是将会话内容存储在数据库中还是直接存储在文件中。该页面上“DiskStore”下的代码示例向您展示如何在会话中放置变量。

(顺便说一句,Python中的布尔文字是True和False,而不是“True”)。