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
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
在瀏覽器環境中有許多的儲存空間,想要查看這些空間的話,可以透過「chrome > Dev Tools > Application > Storage」即能進行查看。 瀏覽器內存空間的差異不僅常常被拿來被當作面試考題,在實務開發中更扮演舉足輕重的角色,今天就想透過這系列的文章深度了解這些瀏覽器內存⋯
Thumbnail
這是一篇有關於使用 Flask 架設網站的教學型文章,介紹了從安裝套件、建立網站專案、撰寫程式、執行測試到實際撰寫的步驟和過程。
Thumbnail
前段時間我們有介紹「【Python 軍火庫🧨 - websockets】雙向溝通的渠道」, 這種方式可以達到基本的連線沒問題,但隨著資安意識的抬頭, 我們的websocket連線也會需要在通道之上進行加密, 那麼我們將根據使用情境來教您如何選用適當的連線。 Server端 我們的Serve
Thumbnail
你知道IG是用Django開發的嗎? 正在學習或使用Django、Flask框架開發後端的你,是否也常在享受Python語法的舒適之餘,仍然煩惱著是否該學習效率更好的GO或Laravel。
前言 這篇文章分享cookie、sessionStorage、localStorage、session的差異,因為前後端溝通常用的就這幾個,我比較常用的是cookie或session,但也是有可能會用到sessionStorage或localStorage的時候,因此想說這邊做個紀錄比較他們的差別
Thumbnail
使用Python開發後端API的經驗中應該會常常看到WSGI與ASGI這兩個名詞, 兩者的差異究竟是什麼呢? 就讓我們來為您科普一番。 什麼是WSGI 全名為「Web Server Gateway Interface」 Web伺服器閘道介面,主要規範HTTP請求如何與伺服器溝通, 通
Thumbnail
本文介紹了 Django 專案中各個檔案的用途,包括 settings.py、tests.py、models.py 等。並且解釋了 MTV 架構的後端運作流程,以及相對應的範例介紹。閱讀本文可幫助讀者更好地瞭解 Django 後端開發。
Thumbnail
本文將介紹如何從頭開始建立一個Django專案,包括安裝和設定,以及創建管理員帳戶和新的app。透過本文,你可以學習到建立自己的網頁的所有步驟和設定。
Thumbnail
Websocket是一種網路傳輸的協定,讓建立一次handshake的過程就可以相互傳遞資料,而非同步的過程能夠讓處理事情更有效率,這篇文章將帶你深入瞭解Websocket如何運作、以及其特點與優勢。
Thumbnail
本文將介紹 Python 中的閉包(Closure),我們將從閉包的定義開始介紹,然後是閉包的用途,以及最後的實作範例。
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
在瀏覽器環境中有許多的儲存空間,想要查看這些空間的話,可以透過「chrome > Dev Tools > Application > Storage」即能進行查看。 瀏覽器內存空間的差異不僅常常被拿來被當作面試考題,在實務開發中更扮演舉足輕重的角色,今天就想透過這系列的文章深度了解這些瀏覽器內存⋯
Thumbnail
這是一篇有關於使用 Flask 架設網站的教學型文章,介紹了從安裝套件、建立網站專案、撰寫程式、執行測試到實際撰寫的步驟和過程。
Thumbnail
前段時間我們有介紹「【Python 軍火庫🧨 - websockets】雙向溝通的渠道」, 這種方式可以達到基本的連線沒問題,但隨著資安意識的抬頭, 我們的websocket連線也會需要在通道之上進行加密, 那麼我們將根據使用情境來教您如何選用適當的連線。 Server端 我們的Serve
Thumbnail
你知道IG是用Django開發的嗎? 正在學習或使用Django、Flask框架開發後端的你,是否也常在享受Python語法的舒適之餘,仍然煩惱著是否該學習效率更好的GO或Laravel。
前言 這篇文章分享cookie、sessionStorage、localStorage、session的差異,因為前後端溝通常用的就這幾個,我比較常用的是cookie或session,但也是有可能會用到sessionStorage或localStorage的時候,因此想說這邊做個紀錄比較他們的差別
Thumbnail
使用Python開發後端API的經驗中應該會常常看到WSGI與ASGI這兩個名詞, 兩者的差異究竟是什麼呢? 就讓我們來為您科普一番。 什麼是WSGI 全名為「Web Server Gateway Interface」 Web伺服器閘道介面,主要規範HTTP請求如何與伺服器溝通, 通
Thumbnail
本文介紹了 Django 專案中各個檔案的用途,包括 settings.py、tests.py、models.py 等。並且解釋了 MTV 架構的後端運作流程,以及相對應的範例介紹。閱讀本文可幫助讀者更好地瞭解 Django 後端開發。
Thumbnail
本文將介紹如何從頭開始建立一個Django專案,包括安裝和設定,以及創建管理員帳戶和新的app。透過本文,你可以學習到建立自己的網頁的所有步驟和設定。
Thumbnail
Websocket是一種網路傳輸的協定,讓建立一次handshake的過程就可以相互傳遞資料,而非同步的過程能夠讓處理事情更有效率,這篇文章將帶你深入瞭解Websocket如何運作、以及其特點與優勢。
Thumbnail
本文將介紹 Python 中的閉包(Closure),我們將從閉包的定義開始介紹,然後是閉包的用途,以及最後的實作範例。