教學課程:在Visual Studio中使用 Flask Web 架構
本文是三部分教學課程系列的第一個步驟,示範如何在Visual Studio中使用 Flask。 Flask 是一種適用於 Web 應用程式的羽量型 Python 架構,可提供 URL 路由和頁面轉譯的基本概念。 Flask 被稱為「微型」框架,是因為它不會直接提供像是表單驗證、資料庫抽象層、身份驗證等功能。 這些功能是由稱為 Flask 擴充功能的特殊 Python 套件所提供,。 延伸模組與 Flask 緊密整合,因此它們看起來就像是 Flask 本身的一部分。 例如,Flask 本身不提供頁面範本引擎。 範本化是由 Jinja 和 Jade 等延伸模組所提供,如本教學課程所示。
在教學課程的步驟 1 中,您會瞭解如何:
- 建立 Visual Studio 方案和 Flask 專案
- 檢查項目重複使用程式碼並執行專案
- 建立 Git 存放庫以維護 Flask 項目的變更
- 使用 Git 版本控制系統
- 建立 Flask 專案的虛擬環境
本教學課程與 Flask 快速入門不同。 您可以深入瞭解 Flask,以及如何使用 Flask 專案範本,為您的專案提供更廣泛的起點。 當您建立專案時,範本會自動安裝 Flask 套件,而快速入門示範如何手動安裝套件。
先決條件
在 Windows 上的 Visual Studio Installer 中選取下列選項的 Visual Studio 2022:
在 [工作負載] 索引卷標上,選取 [Python 開發] 選項。 如需詳細資訊,請參閱 在Visual Studio中安裝 Python 支援。
在 [個別元件] 索引標籤的 [程式碼工具]下,選取 [Git for Windows ] 選項。
Visual Studio 2017 或 Windows 上的 Visual Studio 2019,並在 Visual Studio 安裝程式中選取下列選項:
在 [工作負載] 索引卷標上,選取 [Python 開發] 選項。 如需詳細資訊,請參閱 在Visual Studio中安裝 Python 支援。
在 [程式碼工具] 的 [個別元件] 索引標籤下,選取 [適用於 Windows 的 Git] 和 [適用於 Visual Studio 的 GitHub 擴充功能] 選項。
Flask 專案範本隨附於所有舊版的 Python Tools for Visual Studio 中。 範本詳細數據可能與本教學課程中的描述不同。
不支援 Visual Studio for Mac。 如需詳細資訊,請參閱 Visual Studio for Mac 發生什麼事? Windows、Mac 和 Linux 上的 Visual Studio Code 透過可用的擴充功能與 Python 搭配運作。
建立 Visual Studio 方案和 Flask 專案
在本教學課程的步驟 1 中,您會建立單一 Visual Studio 解決方案,以包含兩個不同的 Flask 專案。 您可以使用 Visual Studio 隨附的不同 Flask 專案範本來建立專案。 藉由將專案保留在相同的方案中,您可以輕鬆地在不同的檔案之間來回切換以進行比較。
請遵循此程式來建立解決方案和 Flask Web 專案:
在 Visual Studio 中,選取 [檔案]>[新增>專案],搜尋 “Flask”。接著,選取 空白 Flask Web 專案 範本,然後選取 [下一步] 。
設定新的項目與解決方案:
將 Visual Studio 項目的 名稱 設定為 BasicProject。 此名稱也用於 Flask 專案。
指定 Visual Studio 位置,以儲存方案和專案。
清除 將方案與專案放在相同目錄 選項中。
將 解決方案名稱 設定為 LearningFlask。 此解決方案可作為本教學課程系列中多個專案的容器。
選擇 來建立。
不久之後,Visual Studio 會在專案〈BasicProject〉中偵測到 Python 套件規格檔案〈requirements.txt〉。:
對話框指出選取的範本包含 requirements.txt 檔案,可用來建立專案的虛擬環境。
選取右側的 X,以關閉提示。 在本教學課程的稍後階段,您會建立虛擬環境,並確保來源控制系統排除這個虛擬環境。 (環境始終可以從 requirements.txt 檔案中建立。)
在 Visual Studio 中,選取 [檔案]>[新增>專案],然後搜尋 “Flask”。然後,選取 空白 Flask Web 專案 範本。 (範本也會在左側清單的 [Python>Web] 下方的對話方塊中找到。
在對話框底部,設定新的專案和方案:
將 Visual Studio 項目的 名稱 設定為 BasicProject。 此名稱也用於 Flask 專案。
指定 Visual Studio 位置,以儲存方案和專案。
將 方案名稱 設定為 LearningFlask。 此解決方案可作為本教學課程系列中多個專案的容器。
選取 [[為解決方案建立目錄] 選項 [預設]。
選擇 建立新的 Git 存放庫 選項。 Visual Studio 會在建立解決方案時建立本機 Git 存放庫。
如果您沒有看到此選項,請執行 Visual Studio 安裝程式。 在 [個別元件] 索引標籤下的 [程式代碼工具] 中,新增 [適用於 Windows 的 Git] 和 [Visual Studio 的 GitHub 擴充功能] 選項。
選取 [確定] 。
一會兒之後,Visual Studio 會顯示提示 此專案需要外部套件:
對話框表示選取的範本包含參考最新 Flask 1.x 套件的 requirements.txt 檔案。 您可以選取 [顯示必要的套件] 以查看確切的相依性。
選取選項 我將自行安裝, 關閉對話框。 稍後在本教學課程中,您將建立虛擬環境,並確保版本控制系統排除該環境。 (環境隨後總是可以從 requirements.txt 檔案中建立。)
檢查 Git 控制件
在接下來的程序中,您將讓自己熟悉 Visual Studio 對 Git 原始檔控制的支援。
重要
在 Visual Studio 2019 16.8 版版本中,Git 版本控制體驗預設為開啟。 如果您想要深入瞭解它與 Team Explorer 的比較方式,請參閱 Git 和 Team Explorer頁面並存比較。
不過,如果您想要繼續在 Visual Studio 2019 中使用 Team Explorer,請移至 [工具]>[>環境]>[預覽功能],然後切換 [[新增 Git 使用者體驗] 複選框。 (此選項不適用於 Visual Studio 2022 和更新版本。如需詳細資訊,請參閱在 Team Explorer 中連線至專案 。
若要將項目認可至本機原始檔控制,請選取 [Visual Studio 主視窗中右下方的 [新增至原始檔控制],然後選取 [Git:
[建立 Git 存放庫] 視窗隨即開啟,您可以在其中建立並推送新的存放庫。
建立存放庫之後,Git 控件列會出現在 Visual Studio 主視窗中的右下角:
從左到右,Git 控制列會顯示傳出/傳入提交的數目(箭號 #/#)、未提交的變更數目(鉛筆 #)、目前分支名稱,以及目前的倉庫名稱。 Git 控制項也可以在主要工具列的 [Git] 選單上取得。
在 Git 控制項列上,選取變更(鉛筆 #)以開啟 [Git Changes] 視窗。 您也可以選擇 檢視>Git 變更 (Ctrl+O,Ctrl+G):
此視窗會顯示任何未認可的變更詳細數據,包括隱藏的變更。 由於您新建立的專案已自動提交到版本控制中,因此您不會看到任何擱置的變更。
在 Git 控制項列上,選取提交(箭號 #/#),然後選取「檢視所有提交」:
Git 存放庫 視窗隨即開啟。 您也可以選取 [檢視]>Git 存放庫 (Ctrl+O,Ctrl+R):
此視窗左窗格中顯示當前存放庫的詳細資訊,右窗格中顯示具有傳出/傳入提交的當前分支。
若要查看檔案差異檢視,請在中央窗格中選取提交。 舊版會顯示在左側,修訂的版本會顯示在右側。 詳細數據也包含變更作者、變更認可者和認可訊息。
因為您在 [新增專案] 對話框中選取 [建立新的 Git 存放庫] 選項,專案在創建過程完成時就已即時提交至本機版本控制系統。 在此程序中,您會熟悉 Visual Studio 的 Git 控制項,以及在 Team Explorer 視窗中使用原始碼管理。
檢查 Visual Studio 主視窗下角的 Git 控制件。 從左至右,這些控件會顯示未推送的提交(箭號 #)、未提交的變更(鉛筆 #)、存放庫的名稱,以及當前分支:
選取變更(鉛筆符號 #),Visual Studio 會在 [變更] 頁面上開啟 [Team Explorer] 視窗。 由於新建立的專案已經自動提交到版本控制,因此您不會看到任何待提交的變更。
在 Visual Studio 狀態列上,選取 [提交](箭號 #)以在 Team Explorer中開啟[同步] 頁面。 因為您只有本機存放庫,因此頁面提供簡單的選項,將存放庫發佈至不同的遠端存放庫。
您可以針對自己的項目選取您想要的服務。 本教學課程示範如何使用 GitHub,其中教學課程的完整範例程式代碼會保留在 Microsoft/python-sample-vs-learning-flask 存放庫中。
當您選取任何 發佈 控件時,Team Explorer 會提示您輸入詳細資訊。 例如,當您發佈本教學課程的範例時,會先建立存放庫本身,其中 [推送至遠端存放庫] 選項會與存放庫的 URL 搭配使用。
如果您沒有現有的存放庫,發佈至 GitHub,並 推送至 Azure DevOps 選項可讓您直接從 Visual Studio 中建立一個存放庫。
提示
若要快速瀏覽 Team Explorer,請選取 [變更] 或 [推送] 標題,以查看可用頁面的快捷選單。
當您進行本教學課程時,請養成定期使用 Visual Studio 中的 Git 控制項來提交和推送變更的習慣。 本教學課程會在適當的時間點提醒您。
從頭開始使用原始檔控制
從項目開頭使用原始檔控制有幾個優點。 當您從項目開頭使用原始檔控制時,特別是當您也使用遠端存放庫時,您就會定期取得專案的異地備份。 與維護本機文件系統上的專案不同,原始檔控制也提供完整的變更歷程記錄,以及將單一檔案或整個專案還原成先前狀態的簡單功能。 變更歷程記錄有助於判斷回歸的原因(測試失敗)。
如果多個人員正在處理專案,則原始檔控制很重要,因為它會管理覆寫並提供衝突解決。 原始檔控制基本上是一種自動化形式,可讓您妥善進行組建、測試和發行管理。 這是針對專案使用 Azure DevOps 的第一個步驟,而且因為進入障礙太低,所以從一開始就沒有理由不使用原始檔控制。
如需更多關於將原始碼控制作為自動化的一部分的資訊,請參閱 真相來源:DevOps 中的存放庫角色,這篇發表於 MSDN Magazine 的文章主要撰寫於行動應用程式,但同樣適用於 Web 應用程式。
防止 Visual Studio 自動認可專案
請遵循下列步驟來防止 Visual Studio 自動認可新專案:
選取 [工具]>[選項]>[原始檔控制]>[Git 全域設定]。
根據預設,清除 [合併后認可變更] 選項,然後選取 [確定] [確定]。
在 Team Explorer中開啟 [設定] 頁面,然後選取 [Git>[全域設定]。
清除 [合併後提交變更] 選項,然後選取 [更新]。
建立虛擬環境並排除原始檔控制
設定專案的原始檔控制之後,您可以使用專案所需的必要 Flask 套件來建立虛擬環境。 然後,您可以使用 [Git 變更] 視窗,將環境的資料夾排除在版本控制之外。
在 [方案總管]中,以滑鼠右鍵按兩下 [Python 環境] 節點,然後選取 [[新增環境]。
在 [[新增環境] 對話框中,選取 [建立],以接受預設值。 (如果您想要的話,您可以變更虛擬環境的名稱,這會變更其子資料夾的名稱,但 env 是標準慣例。
如果 Visual Studio 提示您提供系統管理員許可權,請提供您的同意。 在 Visual Studio 下載並安裝套件時等候幾分鐘。 針對 Flask 及其相依性,此程式可能需要在超過 100 個子資料夾中展開接近 1,000 個檔案。 您可以在 Visual Studio [輸出] 視窗中檢視進度。
在 Git 控制列上,選取未提交的變更(現在顯示 99+),以開啟 [Git 變更] 視窗:
建立虛擬環境會產生數千個變更,但您不需要將它們包含在原始檔控制中。 您或複製專案的任何其他人都可以使用 requirements.txt 檔案來重新建立環境。
若要從原始檔控制中排除虛擬環境,請在 [Git 變更] 視窗中,以滑鼠右鍵按一下 [env] 資料夾,然後選取 [忽略這些本機專案:
排除虛擬環境之後,剩下的唯一變更是專案文件 (.py) 和 .gitignore 檔案,其中包含一個有關虛擬環境資料夾的新增條目。
若要查看 .gitignore 檔案的差異檢視,請在 [Git 變更] 視窗中按兩下檔案。
在 [Git 變更] 視窗中,輸入提交訊息,例如「初始專案變更」:
在 [提交] 下拉選單中,選取 [提交已暫存的變更並推送]。
您可以開啟 [Git 存放庫] 視窗,並確認目前分支中 [本機歷程記錄] 顯示的已暫存的提交。
設定專案的原始檔控制之後,您可以使用專案所需的必要 Flask 套件來建立虛擬環境。 然後,您可以使用 Team Explorer,從原始檔控制中排除環境的資料夾。
在 [方案總管]中,以滑鼠右鍵按兩下 [Python 環境] 節點,然後選取 [[新增虛擬環境]:
[新增虛擬環境] 對話框隨即開啟並顯示訊息,我們發現 requirements.txt 檔案。 訊息指出 Visual Studio 會使用 檔案來設定虛擬環境:
選取 [建立 ] 以接受預設值。 (如果您想要的話,您可以變更虛擬環境的名稱,這會變更其子資料夾的名稱,但 env 是標準慣例。
如果 Visual Studio 提示您提供系統管理員許可權,請提供您的同意。 在 Visual Studio 下載並安裝套件時等候幾分鐘。 針對 Flask 及其相依性,此程式可能需要在超過 100 個子資料夾中展開接近 1,000 個檔案。 您可以在 Visual Studio [輸出] 視窗中檢視進度。
在 Git 控制列上,選取未提交的變更(現在顯示 99+),以在 [Team Explorer] 中開啟 [Git 變更 ]頁面:
建立虛擬環境會產生數千個變更,但您不需要將它們包含在原始檔控制中。 您或複製專案的任何其他人都可以使用 requirements.txt 檔案來重新建立環境。
若要從原始檔控制中排除虛擬環境,請在 [變更] 頁面中,以滑鼠右鍵單擊 [env] 資料夾,然後選取 [忽略這些本機項目:
排除虛擬環境之後,唯一的其餘變更是專案檔(.py)和 .gitignore 檔案,其中包含虛擬環境資料夾的新增條目。
若要查看 .gitignore 檔案的差異檢視,請按兩下檔案。
輸入提交訊息,選取 [提交全部],然後如果需要,將提交推送至遠端存放庫。
瞭解虛擬環境的目的
虛擬環境是隔離應用程式確切相依性的絕佳方式。 這種隔離方法可避免全域 Python 環境中的衝突,並協助測試和共同作業。 隨著時間推移,當您開發應用程式時,您總是引進許多實用的 Python 套件。 藉由將套件保留在專案特定的虛擬環境中,您可以輕鬆地更新描述該環境的專案 requirements.txt 檔案,而此檔案包含在原始檔控制中。 當您將專案複製到其他計算機,包括組建伺服器、部署伺服器和其他開發計算機時,很容易重新建立環境。 您只能使用 requirements.txt 檔案來重新建立環境,這就是為什麼環境不需要在原始檔控制中的原因。 如需詳細資訊,請參閱 使用虛擬環境。
拿掉原始檔控制下的虛擬環境
您可以在將虛擬環境納入版本控制之後移除它。 請遵循下列步驟:
編輯 .gitignore 檔案以排除資料夾:
選取 [檔案]>[開啟>檔案]來開啟檔案。
您也可以從 Team Explorer開啟檔案。 在 [設定] 頁面上,選取 [存放庫設定]。 移至 [忽略 & 屬性檔] 區段,然後選取 .gitignore旁 編輯 連結。
找出結尾處具有批注
# Python Tools for Visual Studio (PTVS)
的區段。在該區段之後,新增虛擬環境資料夾的新行,例如 /BasicProject/env。
開啟指令視窗並移至具有虛擬環境資料夾的資料夾(例如 BasicProject),例如 env。
執行
git rm -r env
命令,以移除目前在原始檔控制下的虛擬環境。使用
git commit -m 'Remove venv'
命令提交您的變更,或從 Team Explorer的 變更 頁面提交變更。
檢查樣板代碼
在本節中,您將檢視 Visual Studio 根據您選擇的範本在 Project 檔案(.py)中建立的樣板程式碼。
開啟 [方案總管] ,以檢視您的方案和項目檔。 初始專案只包含兩個檔案,app.py 和 requirements.txt:
requirements.txt 檔案會指定 Flask 套件相依性。 這個檔案的存在會在您第一次建立專案時提示您建立虛擬環境。
單一 app.py 檔案包含空 Flask 網站專案的範本程式碼。
在編輯器中開啟 app.py 檔案,並檢查第一個區段 Flask 的
import
語句。這個語句會建立
Flask
類別的實例,此實例會指派給變數app
。 本節也會指派wsgi_app
變數(當您部署至 Web 主機但目前未使用時,這非常有用):from flask import Flask app = Flask(__name__) # Make the WSGI interface available at the top level so wfastcgi can get it. wsgi_app = app.wsgi_app
要檢閱的第二個區段會在檔案結尾發生。 本節包含可用來啟動 Flask 開發伺服器的選擇性程序代碼。
您可以定義程式碼,以使用從環境變數擷取的特定主機和埠值,或使用預設主機和埠值
localhost:55551
。if __name__ == '__main__': import os HOST = os.environ.get('SERVER_HOST', 'localhost') try: PORT = int(os.environ.get('SERVER_PORT', '5555')) except ValueError: PORT = 5555 app.run(HOST, PORT)
要檢查的程式代碼第三個區段會將函式指派給 URL 路由,這表示函式會提供 URL 所識別的資源。
您可以使用 Flask 的
@app.route
裝飾器,並以從網站根目錄開始的相對 URL 作為參數來定義路由。 如您在程式代碼中所見,函式只會傳回文字字串,足以讓瀏覽器轉譯。 在本教學課程系列後續的步驟中,您會更新程序代碼,以使用 HTML 轉譯更豐富的頁面。@app.route('/') def hello(): """Renders a sample page.""" return "Hello World!"
瞭解 Flask 類別中的 name 自變數
Flask 類別中的 name
自變數是應用程式模組或套件的名稱。 Flask 會使用名稱來判斷要在哪裡尋找屬於應用程式的範本、靜態檔案和其他資源。 對於單一模組中包含的應用程式,__name__
一律是適當的值。 名稱對於需要偵錯資訊的延伸模組也很重要。 如需詳細資訊和其他自變數,請參閱 Flask 類別檔 (flask.pocoo.org)。
使用多個路由裝飾器
函式可以有多個路由裝飾器。 如果相同的函式提供多個路由,則可以使用任意多的裝飾器。 例如,若要針對 /
路由和 /hello
路由使用 hello
函式,請使用下列程式代碼:
@app.route('/')
@app.route('/hello')
def hello():
"""Renders a sample page."""
return "Hello World!"
使用變數 URL 路由和查詢參數
Flask 可以使用變數 URL 路由和查詢參數。 在路由中,您可以使用 <variable_name>
屬性標記任何變數。 Flask 會使用 URL 路徑中的具名自變數,將變數傳遞至函式。 例如,格式為 /hello/<name>
的路由會產生名為 name
函式的字元串自變數。 查詢參數可透過 request.args
屬性取得,特別是透過 request.args.get
方法取得。 下列程式代碼提供範例:
# URL: /hello/<name>?message=Have%20a%20nice%20day
@app.route('/hello/<name>')
def hello(name):
msg = request.args.get('message','')
return "Hello " + name + "! "+ msg + "."
若要變更類型,請在變數前面加上 int
、float
、path
(接受斜線來劃定資料夾名稱),並 uuid
。 如需詳細資訊,請參閱 Flask 檔中 變數規則。
在套件安裝之後產生需求
安裝其他套件之後,Visual Studio 可以從虛擬環境產生 requirements.txt 檔案。
- 在 [方案總管]中,展開 [Python 環境] 節點,右鍵點擊你的虛擬環境,然後選擇 [產生 requirements.txt]。
當您修改環境時,定期使用此命令是很好的作法。 將 requirements.txt 檔案的變更提交至版本控制系統,以及相依於該環境的任何其他程式碼變更。 如果您在建置伺服器上設定持續整合,您應該在修改環境時產生檔案並提交變更。
執行專案
現在您已準備好依照下列程式在 Visual Studio 中執行專案:
在 Visual Studio 中,選取 [偵錯]>[開始偵錯] (F5),或在主要工具列上選取 [網頁伺服器](您看到的瀏覽器可能會有所不同):
任一命令都會將隨機埠號碼指派給 PORT 環境變數,並執行 Python app.py 檔案。
程式代碼會使用該埠在 Flask 開發伺服器內啟動應用程式。
如果 Visual Studio 張貼訊息 無法啟動除錯程式,並指出找不到啟動檔案,請在 [方案總管] 中以滑鼠右鍵按鍵按鍵按鍵按 app.py 檔案,然後選取 [[設定為啟動檔案]。
當伺服器啟動時,主控台視窗隨即開啟以顯示伺服器記錄檔。 Visual Studio 會自動開啟瀏覽器至
http://localhost:<port>
,您應該會看到由hello
函式顯示的訊息:完成時,請關閉主控台視窗,這會停止 Flask 開發伺服器。 您也可以選擇 [偵錯]>[停止偵錯]。
比較偵錯命令與專案 Python 命令
使用 Debug 選單命令與專案的 Python 子選單中列出的伺服器命令之間存在差異。
除了 偵錯 功能表命令和工具列按鈕之外,您也可以使用 Python>Run server 或 Python>在專案操作功能表上執行偵錯伺服器 命令來啟動伺服器。
這兩個命令都會開啟主控台視窗,您可以在其中看到執行中伺服器的本機 URL(localhost:port
)。 不過,您必須以該 URL 手動開啟瀏覽器,而且執行偵錯伺服器不會自動啟動 Visual Studio 調試程式。 如果您想要稍後再將偵錯程式附加到執行中的進程,您可以使用 偵錯>附加至進程 命令。