我想在请求到来时立即更新日志文件。我有一个类变量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
答案 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”)。