在webapp2中访问请求作为全局变量

时间:2011-12-25 18:13:28

标签: google-app-engine webapp2

我正在将我的appengine应用程序从Pylons迁移到webapp2。 在pylons中,请求和响应对象是全局的。但是,在 webapp2它们作为对象属性被访问(self.request, self.response的)。

但我认为在extras包中使用Local模块是为了 以线程安全的方式访问全局变量。

我无法弄清楚如何将请求对象作为全局访问 在webapp2应用程序中变量而不是self.request,因为它将保留我现有的控制器代码。

我无法找到有关本地模块以及如何使用它的文档。其他框架(如Flask和Bottle)也可以使用contextLocal全局访问请求。因此,在webapp2中以相同的方式访问请求对象将是一个更加可移植的代码。

2 个答案:

答案 0 :(得分:2)

注册表在应用级别和请求级别都可用。之前的答案涉及应用级别。

下面是允许您在请求级别使用全局变量的代码。

def instanceHtml():
    app = webapp2.get_app()
    try: 
        aInstance = app.request.registry[ 'instanceHtml' ]  ## retrieve previous object
        return aInstance
    except:
        aInstance = zhtml.Html()  ## instantiate whatever object you want
        app.request.registry[ 'instanceHtml' ] = aInstance  ## save object
        return aInstance

答案 1 :(得分:1)

我也无法找到全局请求对象。相反,我使用了Registry来传递请求之间的东西。看看这个:

http://webapp-improved.appspot.com/guide/app.html#registry