我已经构建了gae webapps而无需使用dispatch()方法。我在尝试使用webapp2_extras.auth
时遇到过这个问题,但我并不完全理解它的概念以及它如何适应get()
和post()
方法。根据其简要文件:
调度请求。 这将首先检查是否有一个handler_method定义 匹配的路线,如果没有,它将使用相应的方法 请求方法(
get()
,post()
等)。
我的理解是它检查我的路由以查看是否存在处理请求的处理程序类,但是不是已经在现有处理程序类中定义的dispatch()
方法?此外,还没有来自客户端的派遣请求?
我对它的一些用例感到困惑,特别是在webapp_extras.auth
的上下文中。
答案 0 :(得分:1)
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()