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
2會員
15內容數
紀錄轉職路上的點點滴滴
留言0
查看全部
發表第一個留言支持創作者!
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
本專欄將提供給您最新的市場資訊、產業研究、交易心法、精選公司介紹,以上內容並非個股分析,還請各位依據自身狀況作出交易決策。歡迎訂閱支持我,獲得相關內容,也祝您的投資之路順遂! 每年 $990 訂閱方案👉 https://reurl.cc/VNYVxZ 每月 $99 訂閱方案👉https://re
Thumbnail
在讀取檔案時,最怕路徑的問題,常常會有路徑錯誤造成的異常報錯。 為了避免諸如此類的問題發生,明白程式的當前目錄與檔案的路徑是很重要的。 可以利用os 模組是 Python 中的一個標準庫,提供了許多與操作系統的功能。 以下是一些常用的 os 模組基本操作及其範例: 1. os.getcwd
解讀JSON 字串 首先,你需要使用 Python 的 json 模組來解讀JSON 字串。 JSON的基本結構: 由花括號 {} 包圍,內部是鍵值對的集合,每個鍵值對之間用逗號分隔。 鍵是字串類型,值可以是任何JSON支持的資料類型(字串、數字、布林值、陣列、物件或 null)。 {
Thumbnail
Python安裝、外部程式包安裝(pip install xxx)、Hello World 【安裝Python】 Visual Studio Code-Download 進入vscode(延伸模組) 安裝中文介面(輸入ch搜尋) 安裝 搜尋命令提示字元 命令提示字元打python 創建檔案
#取值 #刪值 #型態轉換 練習題
BMI計算機 圓面積計算機 攝氏華式溫度轉換
Thumbnail
該篇文章首要為 1.下載python與文字編輯器vs code (Visual Studio Code) 2.撰寫第一支python程式
Thumbnail
本專欄將提供給您最新的市場資訊、產業研究、交易心法、精選公司介紹,以上內容並非個股分析,還請各位依據自身狀況作出交易決策。歡迎訂閱支持我,獲得相關內容,也祝您的投資之路順遂! 每年 $990 訂閱方案👉 https://reurl.cc/VNYVxZ 每月 $99 訂閱方案👉https://re
Thumbnail
在讀取檔案時,最怕路徑的問題,常常會有路徑錯誤造成的異常報錯。 為了避免諸如此類的問題發生,明白程式的當前目錄與檔案的路徑是很重要的。 可以利用os 模組是 Python 中的一個標準庫,提供了許多與操作系統的功能。 以下是一些常用的 os 模組基本操作及其範例: 1. os.getcwd
解讀JSON 字串 首先,你需要使用 Python 的 json 模組來解讀JSON 字串。 JSON的基本結構: 由花括號 {} 包圍,內部是鍵值對的集合,每個鍵值對之間用逗號分隔。 鍵是字串類型,值可以是任何JSON支持的資料類型(字串、數字、布林值、陣列、物件或 null)。 {
Thumbnail
Python安裝、外部程式包安裝(pip install xxx)、Hello World 【安裝Python】 Visual Studio Code-Download 進入vscode(延伸模組) 安裝中文介面(輸入ch搜尋) 安裝 搜尋命令提示字元 命令提示字元打python 創建檔案
#取值 #刪值 #型態轉換 練習題
BMI計算機 圓面積計算機 攝氏華式溫度轉換
Thumbnail
該篇文章首要為 1.下載python與文字編輯器vs code (Visual Studio Code) 2.撰寫第一支python程式