重定向(redirect)
优质
小牛编辑
119浏览
2023-12-01
Tornado 中的重定向有两种主要方法:self.redirect
,或者使用 RedirectHandler
。
你可以在使用 RequestHandler
(例如 get
)的方法中使用 self.redirect
,将用户 重定向到别的地方。另外还有一个可选参数 permanent
,你可以用它指定这次操作为永久性重定向。
该参数会激发一个 301 Moved Permanently
HTTP 状态,这在某些情况下是有用的, 例如,你要将页面的原始链接重定向时,这种方式会更有利于搜索引擎优化(SEO)。
permanent
的默认值是 False
,这是为了适用于常见的操作,例如用户端在成功发送 POST 请求 以后的重定向。
self.redirect('/some-canonical-page', permanent=True)
RedirectHandler
会在你初始化 Application
时自动生成。
例如本站的下载 URL,由较短的 URL 重定向到较长的 URL 的方式是这样的:
application = tornado.wsgi.WSGIApplication([
(r"/([a-z]*)", ContentHandler),
(r"/static/tornado-0.2.tar.gz", tornado.web.RedirectHandler,
dict(url="http://github.com/downloads/facebook/tornado/tornado-0.2.tar.gz")),
], **settings)
RedirectHandler
的默认状态码是 301 Moved Permanently
,不过如果你想使用 302 Found
状态码,你需要将 permanent
设置为 False
。
application = tornado.wsgi.WSGIApplication([
(r"/foo", tornado.web.RedirectHandler, {"url":"/bar", "permanent":False}),
], **settings)
注意,在 self.redirect
和 RedirectHandler
中,permanent
的默认值是不同的。 这样做是有一定道理的,self.redirect
通常会被用在自定义方法中,是由逻辑事件触发 的(例如环境变更、用户认证、以及表单提交)。而 RedirectHandler
是在每次匹配到请求 URL 时被触发。