我找到的解决方案是创建一个子类并在调用超类运行应用程序之前webapp2.WSGIApplication
修改字典。environ
要将实例设置为请求的属性,而不是必须通过 Request.environ 访问它,我将它添加到environ
'webob.adhoc_attrs' 值中。这是因为 webapp2 的 Request 类继承自 webob 的,而 webob 又继承自管理属性访问的mixin 类。
这是一个为所有请求设置属性的示例应用程序:
import webapp2
class Handler(webapp2.RequestHandler):
def get(self):
try:
foo = self.request.foo
except AttributeError:
foo = 'Default'
self.response.write('Hello %s' % foo)
routes = [('/', Handler)]
class MyWSGIApplication(webapp2.WSGIApplication):
def __call__(self, environ, start_response):
adhoc_attrs = {'foo': 'Foo'}
if 'webob.adhoc_attrs' in environ:
environ['webob.adhoc_attrs'].update(adhoc_attrs)
else:
environ['webob.adhoc_attrs'] = adhoc_attrs
return super(MyWSGIApplication, self).__call__(environ, start_response)
app = MyWSGIApplication(routes)