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

bab*_*wan 1 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
Run Code Online (Sandbox Code Playgroud)

小智 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()
Run Code Online (Sandbox Code Playgroud)

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

import web

web.foo = 'some other value'
Run Code Online (Sandbox Code Playgroud)

在启动脚本中阻塞到Web对象的任何内容都将持续存在,直到重新启动应用程序.有点黑客,但它的工作原理.