如何在Python Flask中使用Flash消息

829 阅读3分钟

How To Use Flash Messages In Python Flask

Flash信息被用于网络应用,在用户浏览图形用户界面时向他们提供有用的反馈。如果你曾经在当今互联网上的任何流行服务中注册过账户,你很可能对Flash消息感到熟悉。这些信息通常在一个特定的事件中出现一次,并在一些简单的JavaScript代码的帮助下在很短的时间内消失。在本教程中,我们将看到如何在Python Flask应用程序中生成这种Flash消息。


flash() - 设置闪光信息

要在Flask中创建flash消息,你可以使用flash模块,将其导入你的项目。flash()函数被传递一个消息参数和一个可选的类别参数。下面突出显示的这行代码为我们的Flask应用程序添加了一条Flash消息。

from flask import Flask, render_template, request, redirect, url_for, flash
import json
import os.path

app = Flask(__name__)


@app.route('/')
def home():
    return render_template('home.html')


@app.route('/shortenurl', methods=['GET', 'POST'])
def shortenurl():
    if request.method == 'POST':
        urls = {}
        if os.path.exists('urls.json'):
            with open('urls.json') as url_storage:
                urls = json.load(url_storage)
        if request.form['shortcode'] in urls.keys():
            flash('Please choose a different Shortcode, that one is already in use')
            return redirect(url_for('home'))
        urls[request.form['shortcode']] = request.form['url']
        with open('urls.json', 'w') as url_storage:
            json.dump(urls, url_storage)
        return render_template('shortenurl.html', shortcode=request.form['shortcode'])
    elif request.method == 'GET':
        return redirect(url_for('home'))
    else:
        return 'Not a valid request method for this route'


@app.route('/<string:shortcode>')
def shortcode_redirect(shortcode):
    if os.path.exists('urls.json'):
        with open('urls.json') as url_storage:
            urls = json.load(url_storage)
            if shortcode in urls.keys():
                return redirect(urls[shortcode])

现在,如果你试图立即运行这段代码,你会得到一个错误,例如。"RuntimeError RuntimeError。因为没有设置秘钥,所以会话不可用。将应用程序上的secret_key设置为唯一的、秘密的东西"。所以为了在Flask中使用flash消息,你需要设置一个秘钥。现在让我们来做这件事。


添加秘钥

如上所述,我们要使用消息闪电,所以我们必须在flask应用中再添加一个属性。这可以在app.py里面完成,就在app变量被设置之后。这样做的方法是使用app.secret_key。这可以让我们安全地从用户那里来回发送信息,以确保在连接上不能有勺子,信息不能被看到。因此,我们需要为app.secret_key提供某种随机的字符串,因为我们是在开发中,你可以直接输入一些想象中的字符串。当涉及到生产时,你会希望找到一个非常随机的密钥,并使其很长,这样就没有人可以猜到秘钥。


get_flashed_messages() - 获取Flash消息

在这一点上,消息正在被闪现到会话中,但我们在GUI上不会看到任何东西。Flash消息在Flask应用程序中的工作方式是将任何Flash消息传递给你要渲染的模板。在该模板中,你可以检查并查看是否有任何flash消息,如果有,就将其显示给用户。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Make A Short URL</title>
</head>
<body>
<h1>Make A Short URL</h1>
{% for message in get_flashed_messages() %}
<h2>{{ message }}</h2>
{% endfor %}
<form action="shortenurl" method="post">
    <label for="url">Enter URL</label>
    <input type="url" name="url" value="" required>
    <label for="shortcode">Enter Name</label>
    <input type="text" name="shortcode" value="" required>
    <input type="submit" value="Submit">
</form>

</body>
</html>

现在我们已经在app.py中使用了flash(),设置了app.secrect_key,也在模板中添加了对get_flashed_messages()的调用,如果在我们的JSON文件中已经发现了重复的短码,用户应该看到一个flash信息。果然,它的效果很好

了解更多关于如何在Python Flask中使用Flash消息的信息