如何将实例属性添加到webapp2.RequestHandler的子类?

时间:2013-06-06 06:41:59

标签: python jinja2 webapp2 requesthandler

我有以下类定义:

class TestHandler(webapp2.RequestHandler):
    def get(self):
        self.msg = "hello world"
        self.render_form()     # modifies self.msg

    def post(self):
        print self.msg
        #...
        #...
        #...
        self.render_form()

运行时,我收到以下错误:

文件“/Users/mhalsharif/Desktop/wordsnet1/ascii-chan/main.py”,第129行,在帖子中     print self.msg AttributeError:'AnswersHandler'对象没有属性'msg'

我只是想在'msg'属性中保存一个字符串,并在调用post()时打印它。为什么我不能这样做?以及如何解决它?

2 个答案:

答案 0 :(得分:1)

要在请求之间传递self.msg之类的数据,您必须使用数据存储区,Cookie或webapp2应用注册表:http://webapp-improved.appspot.com/guide/app.html#registry

答案 1 :(得分:1)

webapp2将根据收到的每个请求实例化一个新的处理程序,因此无法保证如果在请求中设置self.something,您将能够使用另一个请求检索相同的值,只是因为{{1将是一个不同的对象。

在您的情况下会发生这种情况:处理您的get和post请求的处理程序不是同一个实例,因此self将无法读取post因为它从未首先设置

您可以查看docs,以便更好地了解处理程序的生命周期。