此練習旨在讓您以交互式方式熟悉基本的後端/服務器端編程,並讓您在現代的Python/Flask環境中舒適地開發。
閱讀以下內容將有助於您在開發API/寫作服務器端代碼以及它如何適合較大的Web應用程序的上下文時了解全局:
該項目將分為多個部分。完成此項目後,必須按照以下說明提交。
這項練習應在9月17日星期一11:59 PM之前到期。如果您總共花費了10個多小時,包括您在React-thecercise的工作,請提交您擁有的東西!
如有任何疑問,請隨時發送電子郵件至[email protected]。
Mac和Windows的安裝說明。
python上任何東西的另一個不錯的資源,包括安裝,是Hitchhiker的Python指南。
通過在終端中運行以下命令來檢查是否具有正確的版本:
python3 -V
pip3 -V
pipenv --version
首先,叉這個存儲庫。右上角的叉按鈕。這樣做的是將此存儲庫複製到您的帳戶。現在,您應該擁有一個名稱<yourusername>/flask-exercise的存儲庫。
看起來應該像這樣(我的用戶名是tko22): 
然後,克隆此存儲庫(單擊綠色按鈕,說“克隆或下載”,選擇http,然後復制並粘貼位置<url> ),然後進入:
$ git clone <url>
$ cd flask-exercise
然後,設置您的虛擬環境並安裝運行此應用所需的Python依賴性。我們使用PipEnv,它可以自動設置所有內容,並給定一個Pipfile和pipfile.lock。 PipFile使用Virtualenv,這是一個與其他Python項目隔離的虛擬Python環境,無法干擾或受同一機器上其他Python程序的影響或影響。因此,您能夠運行同一軟件包甚至不同版本的不同版本。
pipenv install --skip-lock
您必須在這個虛擬環境中啟動此服務器。這樣做:
pipenv shell
然後,開始運行服務器:
(backend-exercise-o4dc6oDL)$ python app.py
注意:這將是您終端中的運行過程,因此您需要打開一個新的選項卡或窗口以執行其他命令。
要停止服務器,請按Control-C 。
要退出您的虛擬環境,該環境被命名為backend-exercise-[something here]運行:
(backend-exercise-o4dc6oDL)$ deactivate
您還可以在任何命令之前添加pipenv run而不必運行pipenv shell 。例如pipenv run python app.py
在對代碼進行任何更改之前,請確保創建一個新的分支。通常,分支是根據要解決的功能或錯誤的命名的,但是對於此項目,請用自己的名字命名您的分支機構,以便您的評論者可以輕鬆地遵循:
git checkout -b <YOUR_NAME>
分支名稱應全部小寫,不能包含空格。而不是空間,使用連字符。例如:
git checkout -b varun-munjeti
啟動服務器將使其在localhost:5000 。為了向您的服務器提出請求,請使用Postman。
首先,向/端點GET請求。由於服務器正在localhost:5000上運行,因此完整的端點URL為localhost:5000/ 。

嘗試調用/mirror端點。首先,查看端點的代碼,以查看如何指定URL參數。然後向localhost:5000/mirror/<name> :

這些練習將引導您通過使用燒瓶創建一個靜止的API!我們不希望您經歷設置數據庫實例的所有麻煩,因此我們創建了虛擬數據和模擬數據庫界面來與之交互。為了輕鬆起見,整個應用程序邏輯減去app.py中實現的MOCKDB邏輯。對於較大的項目,API端點通常會分為稱為views的不同文件。
在開始之前,請仔細看看create_response功能及其工作原理。確保您遵循有關如何使用此功能的準則,否則您的API將不會遵循適當的約定!
還要查看模擬數據庫。最初的虛擬數據是在mockdb/dummy_data.py中定義的。啟動服務器時,這就是“數據庫”中的“存在”。
在mockdb/mockdb_interface.py中定義的函數是您可以查詢MOCKDB的方式。在您將編寫API的app.py中,這已被輸入名稱db 。因此,當您為端點編寫代碼時,您可以調用db.get('users')之類的db接口函數。
修改代碼時,服務器將自動更新,除非您的代碼不編譯,否則服務器將停止運行,並且在修復代碼後必須手動重新啟動它。
定義端點:
GET /users
這應該返回正確格式的JSON響應,其中包含MOCKDB中所有user s的列表。如果您在啟動服務器後立即致電此端點,則應在Postman中獲得此響應:
{
"code": 200,
"message": "",
"result": {
"users": [
{
"age": 19,
"id": 1,
"name": "Aria",
"team": "LWB"
},
{
"age": 20,
"id": 2,
"name": "Tim",
"team": "LWB"
},
{
"age": 23,
"id": 3,
"name": "Varun",
"team": "NNB"
},
{
"age": 24,
"id": 4,
"name": "Alex",
"team": "C2TC"
}
]
},
"success": true
}
定義端點:
GET /users/<id>
這應該檢索具有請求提供的id的單個用戶。
如果沒有提供id的用戶,請返回帶有描述性message的404 。
通過添加基於他們所在的團隊查詢用戶查詢用戶的能力來擴展第一個/users 。您不應像第2部分中的URL參數一樣使用URL參數。而不是使用查詢字符串。
如果將team作為查詢字符串參數提供,則僅返回該團隊中的用戶。如果提供的team中沒有用戶,請返回一個空列表。
對於此練習,您可以忽略除team以外的任何查詢字符串參數。
在Postman中,您可以提供查詢字符串參數,將查詢字符串寫入您的請求URL,或者通過鍵入Send旁邊的Params按鈕。這樣做將自動填寫請求URL。
以下應該發生
GET /users?team=LWB
{
"code": 200,
"message": "",
"result": {
"users": [{
"age": 19,
"id": 1,
"name": "Aria",
"team": "LWB"
}, {
"age": 20,
"id": 2,
"name": "Tim",
"team": "LWB"
}]
},
"success": true
}

定義端點:
POST /users
此端點應該創建一個新用戶。每個請求還應在請求的body中發送name , age和team參數。 id屬性將在MOCKDB中自動創建。
成功的請求應返回201的狀態代碼,並返回新創建的用戶。
如果未提供三個必需的參數中的任何一個,請不要在數據庫中創建新用戶,並返回帶有有用message的422 。通常,您的消息應為用戶/開發人員提供有關他們做錯了什麼以及如何修復它的有用反饋。
這就是您可以從Postman發送body參數的方式。確保您不會將其誤認為是查詢參數! 
定義端點:
PUT /users/<id>
在這裡,我們需要提供用戶的id ,因為我們需要指定要更新的用戶。該請求的body應包含與第4部分的POST請求相同的屬性。
但是,此PUT請求的區別在於,只有帶有提供的鍵( name , age , team )的值,並且未提供的任何參數不會更改所更新用戶中的相應屬性。
您不需要考慮沒有name , age或team body參數。
如果找不到帶有id的用戶,請返回404和有用的message 。
定義端點:
DELETE /users/<id>
這將使用關聯的id刪除用戶。返回有用的message ,儘管在響應result中沒有任何指定。
如果找不到帶有id的用戶,請返回404和有用的message 。
讓我們寫單元測試!單位測試對於軟件開發非常重要。它可以自動檢查我們的功能是否有效,因為手動測試所有內容都非常緩慢且容易出錯。測試驅動的開發是一個軟件開發過程,在該過程中,我們定義規範,將測試寫入該規範,然後實現功能,然後使用測試來驗證其是否有效。我們為您做了一些事情,因為編寫了第1-3部分的測試。測試它們:
pipenv install --dev
pipenv run pytest
如果您的更改奏效,您應該看到一條綠線說5 passed 。如果沒有,請遵循堆棧跟踪並修復您的實現。一旦他們工作,讓我們為第3-6部分編寫測試。
我們使用Pytest,這是一個有用的Python測試框架,該框架自動找到並運行以test開頭的Python方法,例如test_get_index 。在我們的情況下,我們有一個名為test_app.py的測試文件,該文件保留了第1-3部分的所有測試。
每種方法還接受client對象,該對象會自動由Pytest注入。 client是一個測試固定裝置,您可以在多個測試中使用它,為您的測試提供了固定的基線。初始化時,pytest會查看conftest.py並收集所有固定裝置。在我們的情況下,我們有一個client固定裝置,該固定裝置為燒瓶測試客戶端提供,我們可以用來輕鬆測試我們的API。查看如何使用燒瓶測試客戶端進行其他類型的請求以及如何使用請求有效負載。
完成所有步驟後,將更改推向GitHub存儲庫!
在提交之前,讓我們運行Black,python格式。這消除了關於我們如何設計您的Python代碼的所有論點,並為審稿人提供了標準化的樣式以供您審查。您必須使用pipenv install --dev安裝它
pipenv run black .
在提交PR之前,您必須將分支推到遠程分支(Github上的分支,而不是本地分支)。
檢查您在分支機構上:
git branch
如果您想確保所有的提交都在:
git log
按Q退出git log屏幕。
將您的承諾推到遠程分支:
git push
第一次這樣做時,您可能會遇到錯誤,因為遠程分支尚不存在。通常,它會告訴您正確使用的命令:
git push --set-upstream origin <YOUR_BRANCH_NAME>
注意:只需要第一次推動新分支時才完成。您可以在之後使用git push 。
完成此操作後,請發送電子郵件至[email protected],並帶有指向您的分叉存儲庫和分支名稱的鏈接。我們將需要這兩件事來查看您的提交。