Python webapp2:获取RequestHandler类变量的值

时间:2014-10-21 15:38:31

标签: python google-app-engine python-2.7 webapp2

我有一个RequestHandler的子类:

class GetStats(webapp2.RequestHandler):
    somevar = None
    def post(self):
        ...
        somevar = "somevalue"

并且创建了这个类的实例:

application = webapp2.WSGIApplication([
    ('/stats', GetStats),
], debug=True)

所以我的问题是:如何在getStats类之外获得somevar的值?

我没有此类实例的名称。

可以不将此值保存到global var?

一些更新:

可以创建class Route的某个实例:

mp = webapp2.Route('/', handler=MainPage)
gs = webapp2.Route('/stats', handler=GetStats)

并通过这种方式初始化application

application = webapp2.WSGIApplication([mp,gs], debug=True)

但是无论如何都没有GetStats类的实例名称。

在这种情况下handler=GetStats是否有任何实例化?

如何直接创建GetStats实例?

2 个答案:

答案 0 :(得分:0)

您可以将其写入数据存储区:

from google.appengine.ext import db

class someVarClass(db.Model):
  somevarField = db.StringProperty(required=True)

class GetStats(webapp2.RequestHandler):
    somevar = None
    def post(self):
        ...

        somevar = "somevalue"
        u = someVarClass(somevarField= somevar)
        u.put()

答案 1 :(得分:0)

对于每个请求,都会创建新的处理程序实例。

解决此问题的唯一方法是在请求注册表中保存处理程序实例。

替代方式:使用webapp2注册表

class GetStats(webapp2.RequestHandler):
    def post(self):
        ...
        somevar = "somevalue"
        application.registry['variable'] = somevar
        ...


# outside class
application.registry.get('variable')

这种方式允许避免模块中的全局变量。