我将多租户网络应用移植到Python / Tornado。让我们说每个租户网站有两页:" / foo"和" / bar"。到目前为止,Handlers很容易。
但是,租户可以选择在其主页上显示的内容(" /")。这可能是来自/ foo或/ bar的内容,但最终用户不应被重定向。事实上,租户可以从他们的网站上选择任何页面并将其作为主页。
在我以前的PHP框架中,这是通过内部路由逻辑完成的。但我不能为我的生活找到如何用龙卷风来完成同样的事情。
我目前在BaseHandler的prepare()方法中读取每个租户的配置状态。但这显然为时已晚,无法影响路由逻辑,路由逻辑已将请求映射到处理程序。
有什么方法可以将自定义路由功能附加到" /"允许我选择处理程序来满足请求吗?
答案 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)