1

我想一有请求就更新日志文件。我有一个初始化为 TRUE 的类变量 event_logging_enabled。并在 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
4

2 回答 2

12

我过去所做的并且似乎工作正常的是,如果我需要一个在所有请求中都持久的变量,我会在 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 对象的任何内容都将保持不变,直到应用程序重新启动。有点破解,但它的工作原理。

于 2011-09-23T19:49:51.537 回答
3

我对 web.py 框架不太熟悉,但通常对 Web 应用程序不太熟悉,如果您需要跨多个请求保留状态,则必须使用会话对象来管理它。会话对象对于每个 Web 用户可以是单独的,也可以对于整个应用程序是通用的。

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

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

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

于 2011-09-22T10:47:55.663 回答