我可以使用以下命令获取当前的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.routerequest.route.handler_adapter实例。但不是处理程序实例。处理程序实例未保存。

结论:我使用webapp2.RequestHandler的构造函数将处理程序实例(自身)保存在请求注册表(线程安全)中。而且我不必匹配路由名称,因为对于每个请求,都会创建新的实例(处理程序和请求)。

最佳答案

您的问题(或示例代码段)可能需要更明确地定义,以便人们提供适当的答案。

据我所知,您似乎正在寻找一种方法来查找某些函数的调用堆栈,以便确定最近的RequestHandler实例。如果真是这样,那么这比起webapp2,它更像是一个普通的Python问题,但traceback module可能正是您想要的。

10-06 08:42
查看更多