Python Flask session 學習心得

閱讀時間約 5 分鐘

前言

在完成ALPHA Camp學期2-3的課程,因為接著上了彭彭老師的WeHelp coding bootcamp,再加上年底工作也較忙,似乎還沒機會好好整理學期2-3的心得,這邊可能至少先欠一篇文章,想先根據這周末學習Flask session的運作機制做些簡單的紀錄。

何謂Flask

相較於之前學習是建立在Express架構,再透過Mongoose這個ODM操作MongoDB,這次訓練營的課程則是先使用Python Flask這個套件。Flask 是個輕量級的應用程式框架(micro-framework),簡單說就是彈性較佳且使用較簡單,不像另一個Python常使用的Web應用程式框架Django,可能在表單驗證、template enginee有自己的寫法,Flask給予開發者較多的彈性可以使用更多套件增加功能,另有些優點供大家參考 :
  • 符合WSGI ⇒ WSGI是個由Python定義的通用介面,建立於Web框架與Web server之間,一個WSGI的流程用以將客戶端的請求傳遞給Web應用程式,再將後端Server-side的回應傳回給客戶端。一般來說客戶端的靜態內容會由web server提供,http動態的數據則透過WSGI交給Web框架提供,常見的web server有Apache、IIS等,常見的Web框架有Flask、Django。由於Flask 是運用Werkzeug 這個函示庫開發的框架,而Werkzeug又符合WSGI的規範,因此Flask其實符合WSGI的標準,可以讓我們更方便設定web server,至於Flask 如何體現WSGI可參考此文章
  • Jinja2樣版引擎 ⇒ 如同Express裡面handlebars的功能,在Flask因為使用此樣板引擎,可以讓我們直接使用render_template到一個html檔案並與後端server溝通,避免在該路由撰寫太多html語法,造成程式碼難以維護與閱讀。
  • 不會決定使用哪個資料庫,但提供各種擴充套件整合不同資料庫。
  • 可執行偵錯,如有錯誤會向PYTHON CONSOLE、HTTP CLIENT送出請求。

Flask session

在介紹什麼是Flask後,在完成第四周的作業也稍微另外學習Flask session是如何運作的。依照自己先前的瞭解,http是個無狀態的通訊協定,每個request都是各自執行且不會留存任何紀錄,因此需要用session去儲存資料,讓我們可以在同一個Web應用程式去讀取不同的page。通常是在server端利用session存資料,前端的web server的cookie資訊裡面則會有個session id,在瀏覽器發送請求時會夾帶cookie,後端的AP server會跟據session id找到相對應的session物件並回傳給瀏覽器。然而Flask的session機制好像與我之前的認知稍有不同,並非建立於server端,而是client端的cookie based。
在Flask將資料儲存在session這個object裡面時,可看成是儲存在client端,因為資料其實是存在web server,每次新增內容到session就會新增一個新的cookie(cryptographically-signed cookies),並透過secret_key做簽章。需注意的是這所謂的「secret_key」並不是用於加密(切勿儲存機密資料),而是用來做數位簽章確認資料的完整性,簡單說是每個人都可以知道cookie裡面的資料,但只有server知道cookie是否被串改,如果被串改就無法登入該帳戶。
這裡做個簡單的驗證,以我第四週交的作業為例,登入後的request封包看似有經過加密,
但實際上此字串是透過base64進行編碼,將其進行decode後,就可以取得cookie裡面的session資料,這也是為什麼建議不要儲存敏感性資料。
且我們亦可透過瀏覽器的開發者工具嘗試修改cookie的值
再重新整理此頁面就會發現被登出,這來自於後端伺服器驗證cookie遭竄改故使其失效。

結尾

以上是這周目前對於Flask多學習的簡單心得,希望之後在完成作業之餘,也可多找資料讓學習不僅僅只侷限於visual studio code上的程式碼,而是更瞭解後面所使用套件的運作原理。

參考資源

  1. Developing Web Applications with Python and Flask - Introduction | TestDriven.io
  2. Free Intermediate Flask Course | Rithm School
  3. [AF] ELI5: how sessions work in Flask? : flask (reddit.com)
  4. WSGI、Flask及Werkzeug三者之间的关系_慕城南风的博客-CSDN博客_wsgi werkzeug
  5. Python Web — 快速建置網站的Flask套件. 一般我們想到Python程式,就會聯想到大數據、資料分析、AI等等的應用範疇;想… | by Sean Yeh | Medium
avatar-img
2會員
15內容數
紀錄轉職路上的點點滴滴
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Blockcyber的沙龍 的其他內容
狀況;緣起 在跟著教材執行To-do list清單裡面新增一筆待辦事項時,發現透過GET方法傳送表單的時候,其資料會直接顯示在網址列上,所以通常都會改用POST方法以保持資料的機密性。然而一開始當我們透過req.body這個物件來抓使用者傳送的資料前,教材有提到需要先經過bodyParser提供的方
OBJECTIVE 除了這些技術與見識的增加,與先前學習較大的差異,會強迫自己每週撰寫ORID學習筆記,並針對每週的作業,新增至少一個教材沒有提到的功能,訓練自己查資料並內化的能力。 REFLECTIVE INTERPRETIVE DECISIONAL
Objective 這週為自己設定為禮拜六完成所有課程,同時為兩個小作品「社群名單」、「電影清單」增加至少一個教材要求以外的小功能。 Reflective Interpretive S3 - A14 : 電影清單加碼功能 (codepen.io) Decisional
狀況;緣起 在跟著教材執行To-do list清單裡面新增一筆待辦事項時,發現透過GET方法傳送表單的時候,其資料會直接顯示在網址列上,所以通常都會改用POST方法以保持資料的機密性。然而一開始當我們透過req.body這個物件來抓使用者傳送的資料前,教材有提到需要先經過bodyParser提供的方
OBJECTIVE 除了這些技術與見識的增加,與先前學習較大的差異,會強迫自己每週撰寫ORID學習筆記,並針對每週的作業,新增至少一個教材沒有提到的功能,訓練自己查資料並內化的能力。 REFLECTIVE INTERPRETIVE DECISIONAL
Objective 這週為自己設定為禮拜六完成所有課程,同時為兩個小作品「社群名單」、「電影清單」增加至少一個教材要求以外的小功能。 Reflective Interpretive S3 - A14 : 電影清單加碼功能 (codepen.io) Decisional
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
subprocess.run() 是 Python 3.5 之後引入的一個簡單且強大的函數,用來執行系統命令並等待命令完成。它是 subprocess 模組的高階 API,封裝了低階的 Popen(),提供了更簡便的方式來執行命令、捕獲輸出、處理錯誤等操作。
Thumbnail
本文將指導你如何修改現有的 OpenCV 程式碼,使其利用 CUDA 加速進行深度神經網絡(DNN)推理,如超分辨率圖像放大任務。這將顯著提升運行速度,特別是在高分辨率圖像處理中。 在CMake上這選項要開,才可支援DNN模組。 CMake編譯OpenCV教學文 連結 [OpenCV][Py
Thumbnail
OpenCV 提供了專門針對 CUDA 優化的模組,這些模組使用 cv2.cuda 命名空間,並且可以直接使用 GPU 進行加速。,cv2.cuda 模塊需要在 OpenCV 編譯時啟用 CUDA 支援才能使用。 本文主要比較經過CMAKE重新編譯OpenCV使其支援Cuda,原OpenCV只支援
Thumbnail
要使用 CUDA(Compute Unified Device Architecture)來加速計算,首先需要在你的系統上設置和安裝相關的工具。CUDA 是由 NVIDIA 開發的平行計算框架,用於加速大量數據的運算,尤其在圖像處理、機器學習、科學計算等領域很有應用。 可以參考官方的安裝方式 以
Thumbnail
大學記憶中的程式課,我過得很痛苦。以為懂了,作業卻永遠寫不出來。有鑑於過往痛苦的經歷,學程式語言類似學習外語,應該從需求出發,並且以生活中可理解的事物當作範例學習。所以去年大膽的進行了一個實驗:我們來上中小學生的 Python 課程,透過寫程式解數學題目培養直覺。男孩們選了一個非常瓊瑤的題目!
Thumbnail
在讀取檔案時,最怕路徑的問題,常常會有路徑錯誤造成的異常報錯。 為了避免諸如此類的問題發生,明白程式的當前目錄與檔案的路徑是很重要的。 可以利用os 模組是 Python 中的一個標準庫,提供了許多與操作系統的功能。 以下是一些常用的 os 模組基本操作及其範例: 1. os.getcwd
解讀JSON 字串 首先,你需要使用 Python 的 json 模組來解讀JSON 字串。 JSON的基本結構: 由花括號 {} 包圍,內部是鍵值對的集合,每個鍵值對之間用逗號分隔。 鍵是字串類型,值可以是任何JSON支持的資料類型(字串、數字、布林值、陣列、物件或 null)。 {
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
subprocess.run() 是 Python 3.5 之後引入的一個簡單且強大的函數,用來執行系統命令並等待命令完成。它是 subprocess 模組的高階 API,封裝了低階的 Popen(),提供了更簡便的方式來執行命令、捕獲輸出、處理錯誤等操作。
Thumbnail
本文將指導你如何修改現有的 OpenCV 程式碼,使其利用 CUDA 加速進行深度神經網絡(DNN)推理,如超分辨率圖像放大任務。這將顯著提升運行速度,特別是在高分辨率圖像處理中。 在CMake上這選項要開,才可支援DNN模組。 CMake編譯OpenCV教學文 連結 [OpenCV][Py
Thumbnail
OpenCV 提供了專門針對 CUDA 優化的模組,這些模組使用 cv2.cuda 命名空間,並且可以直接使用 GPU 進行加速。,cv2.cuda 模塊需要在 OpenCV 編譯時啟用 CUDA 支援才能使用。 本文主要比較經過CMAKE重新編譯OpenCV使其支援Cuda,原OpenCV只支援
Thumbnail
要使用 CUDA(Compute Unified Device Architecture)來加速計算,首先需要在你的系統上設置和安裝相關的工具。CUDA 是由 NVIDIA 開發的平行計算框架,用於加速大量數據的運算,尤其在圖像處理、機器學習、科學計算等領域很有應用。 可以參考官方的安裝方式 以
Thumbnail
大學記憶中的程式課,我過得很痛苦。以為懂了,作業卻永遠寫不出來。有鑑於過往痛苦的經歷,學程式語言類似學習外語,應該從需求出發,並且以生活中可理解的事物當作範例學習。所以去年大膽的進行了一個實驗:我們來上中小學生的 Python 課程,透過寫程式解數學題目培養直覺。男孩們選了一個非常瓊瑤的題目!
Thumbnail
在讀取檔案時,最怕路徑的問題,常常會有路徑錯誤造成的異常報錯。 為了避免諸如此類的問題發生,明白程式的當前目錄與檔案的路徑是很重要的。 可以利用os 模組是 Python 中的一個標準庫,提供了許多與操作系統的功能。 以下是一些常用的 os 模組基本操作及其範例: 1. os.getcwd
解讀JSON 字串 首先,你需要使用 Python 的 json 模組來解讀JSON 字串。 JSON的基本結構: 由花括號 {} 包圍,內部是鍵值對的集合,每個鍵值對之間用逗號分隔。 鍵是字串類型,值可以是任何JSON支持的資料類型(字串、數字、布林值、陣列、物件或 null)。 {