【问题标题】:How to do an "internal redirect" in Tornado?如何在 Tornado 中进行“内部重定向”?
【发布时间】:2018-05-13 05:09:24
【问题描述】:

我正在将一个多租户网络应用程序移植到 Python/Tornado。假设每个租户站点有两个页面:“/foo”和“/bar”。到目前为止,使用 Handlers 很容易。

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

在我习惯的 PHP 框架中,这是通过内部路由逻辑完成的。但我终其一生都想不出如何用 Tornado 完成同样的事情。

我目前正在 BaseHandler 的 prepare() 方法中读取每个租户的配置状态。但这显然已经来不及影响路由逻辑了,路由逻辑已经将请求映射到了一个Handler。

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

【问题讨论】:

  • 我认为您需要编写一个Router,它将查看租户的配置状态并相应地选择处理程序。不幸的是,关于这个主题的文档相当混乱。稍后我会添加完整的答案。
  • 就是这样,感谢您朝正确的方向轻推@xyres。我已经使用 Router 类让它工作了。
  • @Dizga Vertov 太好了。

标签: tornado


【解决方案1】:

我在@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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 2022-09-30
    • 2010-09-11
    相关资源
    最近更新 更多