當前位置:網站首頁>flask入門教程(6) - 消息閃現

flask入門教程(6) - 消息閃現

2022-01-27 19:33:01 Ejasmine

消息閃現

一個應用當然要有合適的反饋給用戶,比如注册時可能反饋給用戶:

你的用戶名重複了

這時候你就會更改你的用戶名,flask自然也提供了這個方法:flash

flash

使用flash函數我們可以閃現消息,現調整目錄結構為:

- static
  - test.jpg
- templates
  - index.html
- app.py

這裏index.html需要用到{% %}語法,注意這裏面嵌入if或者for是這樣的,這裏以for舉例:

{% for i in lst %}
<p>i</p>
{% endfor %}

這裏不需要冒號,也不需要縮進,只是使用endfor結束,而if則是以endif結束。

注意flash的內部源碼需要使用session,大家現在只要記住session這東西叫會話,是用來存儲數據的就好,以後我們會詳細講解。

由於session需要使用密匙,那麼這個密匙怎麼得到呢,其實自己起一個就好,但是這肯定不隨機,這時候我們可以用os.urandom函數生成密匙,在命令行輸入下列命令:

python -c "print(__import__('os').urandom(24))"

接下來會輸出一個隨機生成的字符串,你可以複制下來作為密匙,當然你也可以直接這樣:

app.config["SECRET_KEY"] = os.urandom(24)

我們繼續看html

這裏html中獲取flash的消息需要用get_flashed_messages函數,下面是index.html的代碼:

<!-- templates/index.html -->
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        {% for msg in get_flashed_messages() %}
        <p>{
   { msg }}</p>
        {% endfor %}
        <img src="{
     { url_for('static', filename='test.jpg') }}">
    </body>
</html>

app.py使用flash閃現消息:

# app.py
import os

from flask import Flask, render_template, flash

app = Flask(__name__)
app.config["SECRET_KEY"] = os.urandom(24)

@app.route("/")
def index():
    flash("Hello World!")
    return render_template("index.html")

if __name__ == "__main__":
    app.run(debug=True)

打開網頁,你會看到你的消息顯示在了上面:
在這裏插入圖片描述
當然flash還有更多功能,可以指定flash的等級,加上with_categories=true後就可以帶上等級獲取消息了,默認等級是message。這裏是index.html改變後的代碼:

<!-- templates/index.html -->
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        {% for category, msg in get_flashed_messages(with_categories=true) %}
        <p>{
   { category }}: {
   { msg }}</p>
        {% endfor %}
        <img src="{
     { url_for('static', filename='test.jpg') }}">
    </body>
</html>

加上category後的app.py如下:

# app.py
import os

from flask import Flask, render_template, flash

app = Flask(__name__)
app.config["SECRET_KEY"] = os.urandom(24)

@app.route("/")
def index():
    flash("Hello World!")
    flash("Error!", "error")
    return render_template("index.html")

if __name__ == "__main__":
    app.run(debug=True)

打開網頁會發現category顯示出來了:
在這裏插入圖片描述
flash還可以根據消息類別過濾消息,這裏就不展開了,可以在index.html加上參數:

category_filter=["error"]

信號

flask還為我們提供了一個函數,用作在消息發送出後發送一個信號,我們可以把這個信號連接上一個函數,也就是訂閱者,就像我們之後會講到的信號一樣:

from flask import message_flashed

record = []
def record_flash_message(sender, message, category, **kwargs):
    record.append((sender, message, category, kw))
    
message_flashed.connect(record_flash_message, app)

下次見!

版權聲明
本文為[Ejasmine]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/01/202201271933007579.html

隨機推薦