Как сохранить значение переменной для запросов в web.py - PullRequest
1 голос
/ 22 сентября 2011

Я хочу обновить файл журнала, как только поступит запрос.У меня есть переменная класса event_logging_enabled, которая инициализируется в TRUE.и в функции POST () я проверяю значение event_logging_enabled.

Теперь во время выполнения я изменяю значение этого флага на FALSE для последующих запросов.Но это остается TRUE.

Во время отладки я обнаружил, что при получении запроса создается новый объект для обработки каждого запроса, поэтому он выбирает инициализированное значение 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 ]

10 голосов
/ 23 сентября 2011

То, что я делал в прошлом, и, похоже, работает нормально: если мне нужна переменная, которая сохраняется во всех запросах, я помещаю ее в веб-объект прямо перед app.run ()

Например, если я хочу иметь переменную с именем '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'

Все, что вы вставляете в веб-объект в сценарии запуска, будет сохраняться до перезапуска приложения. Немного взломать, но это работает.

3 голосов
/ 22 сентября 2011

Я не слишком знаком с фреймворком web.py, но в целом с веб-приложениями, если вам нужно сохранить состояние для нескольких запросов, вам придется управлять им с помощью объекта сеанса. Объект сеанса может быть отдельным для каждого веб-пользователя или общим для всего приложения.

В каркасе web.py есть объект сеанса: http://webpy.org/docs/0.3/api#web.session

Позволяет вам решить, сохранять ли содержимое сеанса в базе данных или непосредственно в файле. Пример кода в «DiskStore» на этой странице показывает, как разместить переменную в сеансе.

(Кстати, в Python логические литералы имеют значение True и False, а не "True").

...