我已经构建了gae webapps而无需使用dispatch()方法。我在尝试使用webapp2_extras.auth
时遇到过它,但我并不完全理解它的概念以及它如何适应get()
和post()
方法。根据其简要文件:
调度请求。这将首先检查在匹配的路由中是否定义了handler_method,如果没有,它将使用与请求方法相对应的方法(
get()
,post()
等)。
我的理解是它检查我的路由以查看是否存在处理请求的处理程序类,但是不是已经在现有处理程序类中定义的dispatch()
方法?另外,是不是从客户端派遣的请求?
我对它的一些用例感到困惑,特别是在webapp_extras.auth
的背景下。
source code可能是开始寻找理解这个问题的最佳地方。
如果我们只看最后几行,
try:
return method(*args, **kwargs)
except Exception, e:
return self.handle_exception(e, self.app.debug)
它正在调用一个方法,如果该方法调用因异常而失败,则调用handle_exception
方法。所以,这解释了handle_exception
的魔力。
剩下的功能是
get
,post
,put
,delete
,...)并确定处理程序是否支持该方法。至于它如何与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()