flash() 与使用 render_template() 参数相比有什么优势?

时间:2021-07-28 14:43:22

标签: flask

今天学习了 Flask 的 flash() 方法。 我的理解是,它告诉模板显示一次消息。 但也可以通过 render_template() 方法来完成,如下所示:

@app.route('/')
def index():
    if condition:
        error = "Some error messages to flash"
    else:
        error = None
    return render_template('index.html', error=error)

这使得 flash() 方法看起来像是不必要的重复。 使用flash over this在实践上有什么好处或区别?

1 个答案:

答案 0 :(得分:1)

当您向 /profile 发出重定向时,您如何知道用户是自己访问了该页面,还是由于某个操作(例如登录后)而被重定向?

flash() 方法将消息保存到用户会话中,以便他们不会因导航而丢失。

在这种情况下,您不能使用 render_template(name, message="success"),因为当您重定向用户时,浏览器并不关心响应,当它看到 30x 响应时,它会读取 {{ 1}} 标头并在新请求中加载该 URL,因此您设置的任何上下文或呈现的任何内容都将被丢弃。这就是您需要 Location 消息以在两个后续请求之间传递消息的原因。

另外,阅读flask docs中的解释,很清楚。 https://flask.palletsprojects.com/en/2.0.x/patterns/flashing/