我可以使用以下内容获取当前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'),
不使用“self”来引用此对象。有可能吗?
请求对象中的路由对象包含处理程序名称,但不包含实例。
更新:尚未找到解决方案。现在我使用webapp2.RequestHandler
的调度将处理程序(self)存储在全局中。但必须有另一种方式。
为了找到解决方案,我研究了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
的构造函数将处理程序实例(self)保存在请求注册表中(threadsafe)。而且我不必匹配路由名称,因为对于每个请求都会创建新的实例(处理程序和请求)。
答案 0 :(得分:1)
您的问题(或者可能是示例代码段)可能需要更加明确,以便人们提供合适的答案。
据我所知,您似乎正在寻找一种方法来查找某个函数的调用堆栈,以便确定最近的RequestHandler
实例。如果是这种情况,那么这更像是一个普通的Python问题,而不是webapp2,但traceback
module可能就是你要找的东西。