使用Flask的代码401发送重定向不会重定向

时间:2017-04-20 19:18:54

标签: python http redirect flask

当我这样做时,它起作用:

return redirect('/admin-login')

但是当我尝试在参数中传递http代码时,重定向不起作用,我进入了这个页面:`

return redirect('/admin-login', code=401)
  

...重定向

     

您应该自动重定向到目标网址:/ admin-login。如果   不要点击链接。

我该如何解决这个问题?感谢

3 个答案:

答案 0 :(得分:3)

在这两种情况下,消息实际上都是那里。 Flask使用Location标题字段来触发重定向。因此,当您的浏览器看到它跳过显示内容并立即重定向时。

它不适用于code=401的原因是因为401 Unauthorized是客户端错误。这会导致浏览器忽略重定向(至少使用Chrome)。

flask.redirect的Flask文档提到了以下内容:

  

支持的代码为301,302,303,305和307。

没有具体提及为什么他们是唯一受支持的人。但最好的假设是因为浏览器通常不应该重定向,如果它不是3XX status code (Redirection)

因此,解决方案是使用支持的状态代码之一。

答案 1 :(得分:1)

我的解决方案是创建自定义错误页面,将重定向元数据添加到标题中。这将强制页面在页面打开5秒后重定向到主页=}

<meta http-equiv="refresh" content="5;url=/" />

答案 2 :(得分:1)

对我有用的解决方案:

@app.errorhandler(401)
def page_not_found(e):
    return redirect('http://example.com')
以前我一直在尝试:

@app.errorhandler(401)
def page_not_found(e):
    return redirect('http://example.com', code=401)

...但事实证明&#34;,代码= 401&#34;如果它在错误处理程序中运行,则不需要规范,如果没有它,它会自动重定向。