Flask框架從入門到精通之消息閃現和日誌記錄(二十一)

知識點: 一、閃現 二、日誌html

1、概況

Flask提供了一個功能方便向前端反饋消息,這個功能叫閃現。閃現的功能是基於session實現,因此咱們在使用閃現的時候須要配置secret_key。前端

2、使用

咱們用一個上傳圖片的例子來實現閃現,當咱們上傳圖片成功後,給前端反饋一個消息。python

from flask import Flask, render_template, flash, request, url_for, redirect
import os

app = Flask(__name__)

app.config["SECRET_KEY"] = "python is good"

UPLOAD_FOLDER = os.path.join(os.getcwd(), 'media')  # 圖片上傳路徑 = 當前工做目錄+media文件夾


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


@app.route('/upload', methods=['GET', 'POST']) # 支持get、post請求
def upload():  # 視圖函數
    file = request.files.get('file')  # files獲取多媒體資源
    filename = file.filename
    file.save(os.path.join(UPLOAD_FOLDER, filename))  # 保存
    flash('上傳成功')  # 添加閃現信息
    return redirect(url_for('index'))


if __name__ == '__main__':
    # 0.0.0.0表明任何能表明這臺機器的地址均可以訪問
    app.run(host='0.0.0.0', port=5000, debug=True)  # 運行程序

複製代碼

前端代碼數據庫

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

{#獲取閃現#}
{% for msg in get_flashed_messages() %}
    <h1>{{ msg }}</h1>
{% endfor %}

<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="上傳">
</form>

</body>
</html>
複製代碼

選擇一張圖片,點擊上傳: flask

在這裏插入圖片描述
在這裏插入圖片描述
當刷新瀏覽器的時候,閃現消息消失。

3、分類閃現

咱們能夠針對不一樣的場景,提供不一樣的分類。從而達到不一樣的反饋消息的樣式不一樣。 添加閃現消息的時候加個分類:瀏覽器

flash('上傳成功', 'success')  # 添加閃現信息
複製代碼

前端獲取的時候能夠獲取分類:session

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

{#獲取閃現#}
{% for msg in get_flashed_messages(category_filter=['success']) %}
    <h1 style="color: green">{{ msg }}</h1>
{% endfor %}

<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="上傳">
</form>

</body>
</html>
複製代碼

咱們在瀏覽器調試一下: app

在這裏插入圖片描述

4、日誌

  • ERROR:這個級別的日誌意味着系統中發生了很是嚴重的問題,必須有人立刻處理,好比數據庫不可用了,系統的關鍵業務流程走不下去了等等。不少人在實際開發的時候,不會去區分問題的重要程度,只要有問題就error記錄下來,其實這樣是很是不負責任的,由於對於成熟的系統,都會有一套完整的報錯機制,那這個錯誤信息何時須要發出來,不少都是依據單位時間內error日誌的數量來肯定的。所以若是咱們不分輕重緩急,一概error對待,就會徒增報錯的頻率,長此以往,咱們的救火隊員對錯誤警報就不會那麼在乎,這個警報也就失去了原始的意義。函數

  • WARN:發生這個級別的問題時,處理過程能夠繼續,但必需要對這個問題給予額外的關注。假設咱們如今有一個系統,但願用戶每個月更換一次密碼,而到期後,若是用戶沒有更新密碼咱們還要讓用戶能夠繼續登陸,這種狀況下,咱們在記錄日誌時就須要使用WARN級別了,也就是容許這種狀況存在,但必須及時作跟蹤檢查。post

  • INFO:這個級別的日誌咱們用的也是比較多,它通常的使用場景是重要的業務處理已經結束,咱們經過這些INFO級別的日誌信息,能夠很快的瞭解應用正在作什麼。咱們以在12306上買火車票爲例,對每一張票對應一個INFO信息描述「[who] booked ticket from [where] to [where]」。

  • DEBUG和TRACE:咱們把這兩個級別放在一塊兒說,是應爲這兩個級別的日誌是隻限於開發人員使用的,用來在開發過程當中進行調試,可是其實咱們有時候很難將DEBUG和TRACE區分開來,通常狀況下,咱們使用DEBUG足以。

app.logger.debug('A value for debugging')
app.logger.warning('A warning occurred (%d apples)', 42)
app.logger.error('An error occurred')
複製代碼

如,放在咱們上面的代碼中,咱們但願在上傳成功以後,把這條信息記錄一下:

app.logger.info(filename + '上傳成功了.....')
複製代碼

歡迎關注個人公衆號:

image
相關文章
相關標籤/搜索