我可以使用以下命令获取当前的app / WSGI实例:webapp2.get_app()
和当前请求实例:webapp2.get_request()
,但是如何从以下位置获取当前的webapp2处理程序实例:
class MainHandler(webapp2.RequestHandler):
def get(self):
for :
webapp2.Route(r'/', handler=module.MainHandler, name='main'),
而不使用“自我”来引用该对象。可能吗?
请求对象中的路由对象包含处理程序名称,但不包含实例。
更新:尚未找到解决方案。现在,我使用
webapp2.RequestHandler
的分派将处理程序(自身)存储在全局变量中。但是必须有另一种方式。为了找到解决方案,我研究了尼克·约翰逊(Nick Johnsonz)“如何编写自己的Python webapp框架”:http://blog.notdot.net/2010/01/Writing-your-own-webapp-framework-for-App-Engine来了解webapp2的工作方式。
我做了什么 :
使用
webapp2.get_request()
我可以找到request.route
和request.route.handler_adapter
实例。但不是处理程序实例。处理程序实例未保存。结论:我使用
webapp2.RequestHandler
的构造函数将处理程序实例(自身)保存在请求注册表(线程安全)中。而且我不必匹配路由名称,因为对于每个请求,都会创建新的实例(处理程序和请求)。 最佳答案
您的问题(或示例代码段)可能需要更明确地定义,以便人们提供适当的答案。
据我所知,您似乎正在寻找一种方法来查找某些函数的调用堆栈,以便确定最近的RequestHandler
实例。如果真是这样,那么这比起webapp2,它更像是一个普通的Python问题,但traceback
module可能正是您想要的。