我有一个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实例?
答案 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')
这种方式允许避免模块中的全局变量。