開發伺服器¶
Flask 提供 run
命令,以使用開發伺服器執行應用程式。在偵錯模式下,此伺服器提供互動式偵錯工具,並在程式碼變更時重新載入。
命令列¶
flask run
CLI 命令是執行開發伺服器的建議方式。使用 --app
選項指向您的應用程式,並使用 --debug
選項啟用偵錯模式。
$ flask --app hello run --debug
這會啟用偵錯模式,包括互動式偵錯工具和重新載入器,然後在 https://127.0.0.1:5000/ 上啟動伺服器。使用 flask run --help
查看可用的選項,並參閱 命令列介面 以取得關於配置和使用 CLI 的詳細說明。
位址已被使用¶
如果另一個程式已在使用連接埠 5000,當伺服器嘗試啟動時,您會看到 OSError
。它可能具有以下訊息之一
OSError: [Errno 98] Address already in use
OSError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions
您可以識別並停止另一個程式,或使用 flask run --port 5001
來選擇不同的連接埠。
您可以使用 netstat
或 lsof
來識別哪個程序 ID 正在使用連接埠,然後使用其他作業系統工具停止該程序。以下範例顯示程序 ID 6847 正在使用連接埠 5000。
$ netstat -nlp | grep 5000
tcp 0 0 127.0.0.1:5000 0.0.0.0:* LISTEN 6847/python
$ lsof -P -i :5000
Python 6847 IPv4 TCP localhost:5000 (LISTEN)
> netstat -ano | findstr 5000
TCP 127.0.0.1:5000 0.0.0.0:0 LISTENING 6847
macOS Monterey 及更高版本會自動啟動一個使用連接埠 5000 的服務。您可以選擇停用此服務,而不是使用不同的連接埠,方法是在「系統偏好設定」中搜尋「AirPlay 接收器」並將其關閉。
重新載入時的延遲錯誤¶
當使用帶有重新載入器的 flask run
命令時,即使您在程式碼中引入語法錯誤或其他初始化錯誤,伺服器仍將繼續執行。存取網站將顯示錯誤的互動式偵錯工具,而不是使伺服器崩潰。
如果在呼叫 flask run
時已存在語法錯誤,它將立即失敗並顯示追溯,而不是等到網站被存取時。這是為了使錯誤在初始時更明顯,同時仍然允許伺服器處理重新載入時的錯誤。
在程式碼中¶
開發伺服器也可以從 Python 中使用 Flask.run()
方法啟動。此方法接受類似於 CLI 選項的引數來控制伺服器。與 CLI 命令的主要區別在於,如果在重新載入時發生錯誤,伺服器將會崩潰。debug=True
可以傳遞以啟用偵錯模式。
將呼叫放置在主區塊中,否則稍後嘗試使用生產伺服器匯入和執行應用程式時,它會造成干擾。
if __name__ == "__main__":
app.run(debug=True)
$ python hello.py