【问题标题】:What is webapp2's dispatch() method used for?webapp2 的 dispatch() 方法是做什么用的?
【发布时间】:2023-04-10 09:13:01
【问题描述】:

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

发送请求。 这将首先检查是否在 匹配的路由,如果不是,它将使用对应的方法 请求方法(get()post() 等)。

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

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

【问题讨论】:

    标签: python google-app-engine webapp2


    【解决方案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()
    

    【讨论】:

    • 请求处理程序不是已经知道要调用哪些方法了吗?例如,如果使用method="get" 提交表单,那么该请求不会自动分派给get(self) 方法吗?
    • @haopei -- WSGIApplication 通过路由器(通过default_dispatcher 方法)将请求分派给处理程序。一旦请求到达处理程序,由处理程序决定请求对应的方法。 dispatch是方法,负责挑选方法并调用它。
    猜你喜欢
    • 1970-01-01
    • 2020-04-29
    • 2011-01-18
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 2018-11-03
    相关资源
    最近更新 更多