如何在运行时替换或修改Tornado处理程序?

2024-06-25 22:44:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个Jupyter服务器扩展,允许我编写一个tornado.web.RequestHandler类。我想修改应用程序初始化时使用的处理程序之一,特别是创建default redirect的处理程序:

(r'/?', web.RedirectHandler, {
    'url' : settings['default_url'],
    'permanent': False, # want 302, not 301
})

RequestHandler对象,我可以访问使用的tornado.web.Application子类。是否有一个公共API来获取我可以修改的处理程序列表?在

具体来说,我希望更改创建tornado.web.RedirectHandler时使用的'url'参数。似乎没有一个文档化的api用于此,所以我想我必须完全替换这个处理程序。在


Tags: 服务器webfalse应用程序defaulturl处理程序settings
2条回答

tornado.web.Application的任何实例都有default_router

>>> import tornado.web
>>> import tornado.routing
>>> r1 = tornado.routing.Rule(r'/', MainHandler, name="/")
>>> r2 = tornado.routing.Rule(r'/sub/[\w-]+/', SubHandler, name="/sub/{name of}")
>>> app_tornado = tornado.web.Application([r1, r2])
>>> app_tornado.default_router.rules
[Rule(<tornado.routing.AnyMatches object at 0x7f603cadd0b8>, <tornado.web._ApplicationRouter object at 0x7f603cadd080>, kwargs={}, name=None)]
>>> app_tornado.default_router.rules[0].target.rules
[Rule('/', <class '__main__.MainHandler'>, kwargs={}, name='/'), Rule('/sub/[\\w-]+/', <class '__main__.SubHandler'>, kwargs={}, name='/sub/{name of}')]

因此,您可以添加规则:

^{pr2}$

可能是你想要的。在

Tornado不支持在运行时更改处理程序。相反,请创建自己的处理程序,该处理程序根据您需要的任何条件执行所需的重定向:

class MyRedirectHandler(RequestHandler):
    def get(self):
        self.redirect(self.settings['default_url'], permanent=False)

相关问题 更多 >