什么是webapp2的dispatch()方法用于?

时间:2016-03-04 20:00:24

标签: python google-app-engine webapp2

我已经构建了gae webapps而无需使用dispatch()方法。我在尝试使用webapp2_extras.auth时遇到过这个问题,但我并不完全理解它的概念以及它如何适应get()post()方法。根据其简要文件:

  

调度请求。       这将首先检查是否有一个handler_method定义       匹配的路线,如果没有,它将使用相应的方法       请求方法(get()post()等)。

我的理解是它检查我的路由以查看是否存在处理请求的处理程序类,但是不是已经在现有处理程序类中定义的dispatch()方法?此外,还没有来自客户端的派遣请求?

我对它的一些用例感到困惑,特别是在webapp_extras.auth的上下文中。

1 个答案:

答案 0 :(得分:1)

source code可能是开始了解此问题的最佳位置。

如果我们只看最后几行,

try:
    return method(*args, **kwargs)
except Exception, e:
    return self.handle_exception(e, self.app.debug)

它正在调用一个方法,如果该方法调用因异常而失败,则调用handle_exception方法。所以,这解释了handle_exception的神奇之处。

该功能的其余部分是

  1. 查看请求并找出要调用的方法(getpostputdelete,...)并确定处理程序是否支持该方法方法。
  2. 确定是否应该将任何其他参数传递给处理程序。
  3. 至于它如何与webapp2_extras.auth一起玩,我认为这取决于你想要做什么。我想你可以创建一个处理器子类来检查用户是否已登录:

    class AuthedHandler(webapp2.RequestHandler):
        def dispatch(self):
            # Check of user is authenticated, otherwise redirect or 
            # return error response.
            super(AuthedHandler, self).dispatch()
    
相关问题