iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0
AI & Data

AIoT的藍藥丸與紅藥丸,你選哪個?系列 第 57

補充:撰寫Flask Web來存取Mongo DB (2)

  • 分享至 

  • xImage
  •  

前言

https://ithelp.ithome.com.tw/upload/images/20231014/20162501y6nzFoW9NM.jpg
Day 29:物聯網幽靈的RESTful API 謎題.芝麻開門中提到:用Flask來建立一個RESTful API,並且要按照「宿舍訪客名單 API 的需求規格」需求規格,用 Flask 跟 PyMongo來實作API,然後用Postman來測試它的功能和效能。
這個程式碼的目的是建立一個宿舍訪客名單的網路服務,讓使用者可以透過網路來查詢、新增、修改或刪除訪客的資料。

回顧

上次撰寫Flask Web來存取Mongo DB (1)已經實作完以下內容:

目標

這次的目標是實作以下內容:

四、建立 HTTPBasicAuth 物件

這就像是管理員要先準備好一個驗證機制,才能確保只有合法的使用者才能使用他的服務。

# 建立 HTTPBasicAuth 物件
auth = HTTPBasicAuth()

關於「HTTPBasicAuth的使用」可以參考 Jenrey(2019) 寫的這篇文章

  • 這段程式碼是使用 flask_httpauth 來實現基本認證(Basic Authentication)的一個步驟。
  • 基本認證是一種簡單的 HTTP 認證機制,它要求使用者提供帳號和密碼來存取受保護的資源。flask_httpauth 可以讓我們在 Flask 這個 Web 框架中輕鬆地使用基本認證來保護 API 或視圖。
  • 這段程式碼的意思是建立一個 HTTPBasicAuth 的物件(可以想像flask_httpauth是保全公司的名字),並且將它指派給 auth 這個變數(告訴值班的保全公司人員一些規則)。

五、設定帳號密碼驗證機制

這就像是管理員要先設定好一組帳號密碼,並且在每次有人要使用他的服務時,都要先檢查他們是否提供正確的帳號密碼。

# 設定帳號密碼驗證機制
@auth.verify_password
def verify_password(username, password):
    return username == "admin" and password == "123456"
  • HTTPBasicAuth 是 flask_httpauth 提供的一個類別(就像保全公司提供的一種服務),它可以讓使用者定義認證的邏輯和回應(意思就是讓使用者決定要怎麼檢查別人的帳號和密碼,還有怎麼回應別人的請求)。
  • 在這裡實現驗證的邏輯(可以想像是告訴保全員/管理員,要怎麼判斷別人是否有權限進入網站或服務),例如查詢資料庫或其他方式,如果驗證成功,返回 True,否則返回 False。

六、定義路由和 HTTP 方法

並使用auth.login_required decorator要求驗證

這就像是管理員要先定義好一些規則,例如:

  • 如果有人要查詢或新增訪客資料,他們要用網址 http://192.168.1.100:5000/visitors 來跟管理員聯絡,並且告訴他們是要查詢(GET)還是新增(POST)。
  • 如果有人要修改或刪除特定的訪客資料,他們要用網址 http://192.168.1.100:5000/visitors/ 來跟管理員聯絡,並且告訴他們是要修改(PUT)還是刪除(DELETE),以及要操作哪一筆資料(id)。
# 定義路由和 HTTP 方法,並使用 auth.login_required decorator要求驗證
@app.route("/visitors", methods=["GET", "POST"])
@auth.login_required
def visitors():
  • 可以使用 auth.login_required 這個decorator,來保護 API 或視圖(告訴保全人員哪些地方需要保護),要求使用者通過認證才能存取(當有人試圖進入受保護的網站或服務,要先檢查是否有正確的帳號和密碼,如果沒有就不能進入)。

下集預告


上一篇
補充:撰寫Flask Web來存取Mongo DB (1)
下一篇
補充:撰寫Flask Web來存取Mongo DB (3)
系列文
AIoT的藍藥丸與紅藥丸,你選哪個?62
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言