如何进行内部重定向"在龙卷风?

时间:2018-05-12 16:49:17

标签: tornado

我将多租户网络应用移植到Python / Tornado。让我们说每个租户网站有两页:" / foo"和" / bar"。到目前为止,Handlers很容易。

但是,租户可以选择在其主页上显示的内容(" /")。这可能是来自/ foo或/ bar的内容,但最终用户不应被重定向。事实上,租户可以从他们的网站上选择任何页面并将其作为主页。

在我以前的PHP框架中,这是通过内部路由逻辑完成的。但我不能为我的生活找到如何用龙卷风来完成同样的事情。

我目前在BaseHandler的prepare()方法中读取每个租户的配置状态。但这显然为时已晚,无法影响路由逻辑,路由逻辑已将请求映射到处理程序。

有什么方法可以将自定义路由功能附加到" /"允许我选择处理程序来满足请求吗?

1 个答案:

答案 0 :(得分:2)

我在@xyres提示后想出来了。我不相信这在任何地方都有记录。

应用程序中的规则:

url(r"/", HomeRouter(self), name="home"),

班级:

from tornado.routing import Router

class HomeRouter(Router):
    def __init__(self, application):
        self.application = application

    def find_handler(self, request, **kwargs):
        ...logic here...
        home_handler = ChosenHandler
        return self.application.get_handler_delegate(request, home_handler)