第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Flask 的 debug 模式

使用 Flask 開發(fā)過程中存在兩個常見的問題:

  1. 當 Flask 程序出錯時,沒有提示錯誤的詳細信息;
  2. 修改 Flask 源代碼后需要重啟 Flask 程序。

這兩個問題非常的影響開發(fā)效率,因此 Flask 引入了 debug 模式解決以上問題。本節(jié)講解如何啟用 debug 模式,并通過具體的例子,講解在 debug 模式下是如何解決以上問題的。

Tips:本節(jié)課所有代碼已經上傳到了 Github,可以點擊這里進行下載。

1. 開發(fā)中的常見問題

1.1 沒有提示錯誤的詳細信息

如果 Flask 程序中有錯誤,在瀏覽器界面中看不到錯誤的詳細信息。下面是一個包含錯誤的 Flask 程序 error.py

#!/usr/bin/python3
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    1/0
    return '<b>hello world</b>'

if __name__ == '__main__':
    app.run()

在第 7 行,存在一個除以零的錯誤,在瀏覽器中訪問該 Flask 程序,顯示如下:

圖片描述

瀏覽器中提示 Internal Server Error,表示服務端程序出現(xiàn)錯誤,但是沒有給出錯誤的詳細信息,即產生錯誤的文件、函數、行號等位置信息,排查錯誤非常不方便。

1.2 修改源代碼后需要重啟

開發(fā) Flask 程序有如下 3 個步驟:

  1. 編輯 Flask 源程序
  2. 在命令行中啟動 Flask 程序
  3. 在瀏覽器中訪問 Flask 程序

每次對 Flask 源程序進行修改后,都需要重啟動 Flask 程序。例如,編寫如下 Flask 程序:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return '<b>hello world</b>'

if __name__ == '__main__':
    app.run()

程序的功能:訪問頁面 / 時,返回文本 ‘hello world’,現(xiàn)在希望返回文本 ‘HELLO WORLD’,需要做如下工作:

  1. 切換到編輯器,編輯 Flask 源程序,將 ‘hello world’ 修改為 ‘HELLO WORLD’
  2. 切換到終端,終止原先運行的 Flask 程序,再次運行 Flask 程序
  3. 切換到瀏覽器,訪問頁面 /

在開發(fā)的過程中,需要在編輯器、終端、瀏覽器這 3 個程序之間來回切換,非常的繁瑣。

這個時候,我們就需要使用 Debug 模式來快速解決上面的這兩個問題:

2. Flask 的 Debug 模式

2.1 簡介

Flask 程序可以運行在 Debug 模式下,Debug 模式提供了如下功能:

  1. 當 Flask 程序出現(xiàn)錯誤時,在瀏覽器中提示錯誤的詳細信息
  2. 修改 Flask 程序代碼后,F(xiàn)lask 程序會重新加載,不需要重啟 Flask 程序,即可在瀏覽器中看到修改后的效果

調用 Flask 應用的 run 方法時,設置參數 Debug = True,啟動 Flask 程序的調試模式。編寫程序 debug-on.py 如下:

from flask import Flask
app = Flask(__name__)

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

在第 5 行,app.run(debug = True),啟動 Flask 程序的調試模式。運行程序,輸出如下:

$ python3 debug.py
 * Serving Flask app "debug" (lazy loading)
 * Environment: production
 * Debug mode: on
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 316-471-540
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

在第 4 行,Debug mode: on,表示 Flask 程序已經進入了調試模式。

2.2 提示錯誤的詳細信息

編寫一個包含錯誤的 Flask 程序 error-debug-on.py,代碼如下:

#!/usr/bin/python3
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    1/0
    return '<b>hello world</b>'

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

在第 7 行,函數 hello_world 中,存在一個除以 0 的錯誤;在第 11 行,設置 debug = True 啟用調用模式,運行程序,在瀏覽器中顯示如下:

圖片描述

瀏覽器中顯示錯誤類型 ZeroDivisionError,并給出了錯誤的詳細位置:bug.py, line 7, in hello_world,給調試程序提供了方便。

2.3 修改源碼不用重啟

啟用調試模式后,不用重啟 Flask 程序,即可在瀏覽器中看到修改后的效果,本節(jié)演示這個過程。

編寫 Flask 程序

編寫一個 Flask 程序 reload.py,使用 app.run(debug = True) 啟用調試模式:

#!/usr/bin/python3
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return '<b>hello world</b>'

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

啟動 Flask 程序

在終端啟動 Flask 程序,顯示如下:

圖片描述

修改 Flask 程序

修改 Flask 程序,原先的程序返回一段文本 ‘hello world’,現(xiàn)在將其修改為 ‘HELLO WORLD’,在編輯器中保存,然后切換到終端,終端顯示如下:

圖片描述

終端中顯示: * Detected change in ‘/home/guest/reload.py’, reloading
,表示 Flask 程序檢測到 reload.py 發(fā)生了變化,重新加載。

觀察修改后的效果

切換到瀏覽器,刷新頁面后,顯示字符串 ‘HELLO WORLD’。在沒有重啟 Flask 程序的情況下,可以看到修改后的效果了。效果如下所示:

圖片描述

3. 小結

本節(jié)首先介紹了影響開發(fā)效率的兩個常見問題,講解 Flask 中的 debug 模式的功能,通過具體的例子,講解 debug 模式的兩個主要優(yōu)點:

  • Flask 程序發(fā)生錯誤時,在瀏覽器中可以看到錯誤消息;
  • 修改源代碼后,不需要重啟 Flask 程序。

使用思維導圖總結如下:

圖片描述