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

问题描述 投票:0回答:1

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

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

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

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

python google-app-engine webapp2
1个回答
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. 确定是否应该将任何其他参数传递给处理程序。

至于它如何与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()
© www.soinside.com 2019 - 2024. All rights reserved.