簡單的 ?Flask? 后端應用

from flask import Flask, request, jsonify, session
import os
app = Flask(__name__)
app.secret_key = os.urandom(24) 
users = {
'123': 'admin',
'admin': 'admin'
}
# 登錄接口
@app.route('/login', methods=['POST'])
def login():
data = request.get_json()
username = data.get('username')
password = data.get('password')
if username in users and users[username] == password:
session['logged_in'] = True
return 'Login successful', 200
else:
return 'Login failed', 401

這段代碼是一個簡單的 ?Flask? 后端應用,實現了一個用戶登錄功能,并使用 ?Session? 來管理用戶登錄狀態。以下是代碼的詳細解釋:


?1. 導入必要的模塊?

from flask import Flask, request, jsonify, session
import os
  • ?**Flask**?:Flask 框架的核心類,用于創建 Web 應用。
  • ?**request**?:用于處理 HTTP 請求(如獲取 POST 數據)。
  • ?**jsonify**?:用于返回 JSON 格式的響應(雖然代碼中沒有直接使用)。
  • ?**session**?:用于管理用戶會話(Session),存儲登錄狀態等信息。
  • ?**os**?:用于生成安全的隨機密鑰。

?2. 創建 Flask 應用?

app = Flask(__name__)
app.secret_key = os.urandom(24)  # 設置一個密鑰,用于加密 session 數據
  • ?**app = Flask(__name__)**?:創建一個 Flask 應用實例。
  • ?**app.secret_key = os.urandom(24)**?:
    • ?**secret_key**? 是 Flask 用來加密 Session 數據的密鑰。
    • ?**os.urandom(24)**? 生成一個 24 字節的隨機密鑰,確保 Session 數據的安全性。

?3. 模擬用戶數據?

users = {'123': 'admin','admin': 'admin'
}
  • 這是一個簡單的字典,存儲用戶名和密碼(實際項目中應該使用數據庫)。
  • 示例用戶:
    • 用戶名?123,密碼?admin
    • 用戶名?admin,密碼?admin

?4. 登錄接口?/login

@app.route('/login', methods=['POST'])
def login():data = request.get_json()  # 獲取 POST 請求的 JSON 數據username = data.get('username')  # 獲取用戶名password = data.get('password')  # 獲取密碼if username in users and users[username] == password:session['logged_in'] = True  # 登錄成功,設置 Sessionreturn 'Login successful', 200  # 返回成功消息else:return 'Login failed', 401  # 返回失敗消息

?功能解析?

  1. ?**@app.route('/login', methods=['POST'])**?:
    • 定義了一個 ?POST? 請求的路由?/login,用于處理登錄請求。
  2. ?**data = request.get_json()**?:
    • 獲取客戶端發送的 ?JSON 數據?(如?{"username": "hami", "password": "admin"})。
  3. ?**username = data.get('username')? 和 ?password = data.get('password')**?:
    • 從 JSON 數據中提取?username?和?password
  4. ?驗證用戶?
    • 檢查?username?是否在?users?字典中,并且密碼是否匹配。
    • 如果匹配:
      • ?**session['logged_in'] = True**?:設置 Session,標記用戶已登錄。
      • ?**return 'Login successful', 200**?:返回成功消息(HTTP 200)。
    • 如果不匹配:
      • ?**return 'Login failed', 401**?:返回失敗消息(HTTP 401 未授權)。

?5. Session 的作用?

  • ?**session['logged_in'] = True**?:
    • 在用戶登錄成功后,Flask 會存儲一個加密的 Session Cookie 在客戶端(瀏覽器)。
    • 后續請求會自動攜帶這個 Cookie,服務器可以檢查?session['logged_in']?來判斷用戶是否登錄。
  • ?**secret_key**? 的作用:
    • 確保 Session 數據不會被篡改(因為數據是加密的)。

?6. 如何測試這個 API???

可以使用 ?Postman? 或 ?curl? 發送 POST 請求:

curl -X POST http://127.0.0.1:5000/login \-H "Content-Type: application/json" \-d '{"username": "hami", "password": "admin"}'

?成功響應:??

Login successful

?失敗響應:??

Login failed

?7. 可能的改進?

  1. ?使用數據庫存儲用戶?(如 SQLite、MySQL)。
  2. ?密碼加密存儲?(如?bcrypt?或?hashlib)。
  3. ?添加注銷功能?(session.pop('logged_in', None))。
  4. ?返回 JSON 格式的響應?(如?jsonify({"message": "Login successful"}))。

?總結?

  • 這是一個簡單的 ?Flask 登錄 API,使用 ?Session? 管理登錄狀態。
  • 適用于小型應用或學習 Flask 的 Session 機制。
  • 實際項目中需要更安全的用戶管理和數據庫支持。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87689.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87689.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87689.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

spring-webmvc @PathVariable 典型用法

典型用法 基礎用法 GetMapping("/users/{id}") public String getUser(PathVariable Long id) {return "User ID: " id; } 請求:/users/1001 輸出:User ID: 1001---- GetMapping("/users/{userId}/orders/{orderId}") …

LVS+Keepliaved高可用群集

目錄 keepalived雙擊熱備基礎知識1.keepallived概述及安裝keepalived的熱備方式 2.使用keepalived實現雙機熱備 案例1.基礎主備調度器環境配置2.配置主調度器3.配置從調度器4.配置兩臺節點服務器5.測試 keepalived雙擊熱備基礎知識 Keepalived 起初是專門針對 LVS 設計的一款強…

在Unreal Engine 5(UE5)中,Get PlayerPawn和Get PlayerController的區別以及如何計算玩家和目標之間的距離。

一、兩者區別 在Unreal Engine 5(UE5)中,獲取玩家的位置信息通常有兩種方式:通過PlayerPawn或通過PlayerController。具體使用哪一個取決于你想要獲取的是哪個實體的位置。 1.Get Player Pawn: PlayerPawn是玩家實際…

linux線程同步

互斥鎖 同步與互斥概述** 現代操作系統基本都是多任務操作系統,即同時有大量可調度實體在運行。在多任務操作系統中,同時運行的多個任務可能: 都需要訪問/使用同一種資源 多個任務之間有依賴關系,某個任務的運行依賴于另一個任…

Spring 的IoC 和 AOP

第一部分:關于 IoC (控制反轉) 1. 核心思想 (What & Why) 首先,我會先解釋 IoC 的核心思想,而不是直接講技術。 “IoC,即控制反轉,它是一種重要的設計思想,而不是一個具體的技術。它的核心是將傳統上…

[實戰] Windows 文件讀寫函數 `ReadFile()` 和 `WriteFile()` 的阻塞與非阻塞操作詳解(含完整C語言示例)

Windows 文件讀寫函數 ReadFile() 和 WriteFile() 的阻塞與非阻塞操作詳解(含完整C語言示例) 在 Windows 平臺進行文件或設備(如串口、管道)編程時,ReadFile() 和 WriteFile() 是最常用的兩個 API 函數。它們既可以以…

Singularity 安裝

Singularity 是什么? 核心功能:用于創建/運行容器(將應用+依賴打包的獨立環境)。 與 Docker 的區別:專為 HPC(高性能計算)設計,無需后臺守護進程,支持非 root 運行容器(但安裝本身需 root 權限)。 適用于在具有 root 權限的計算機上從源代碼安裝 Singularity。…

辯證視角下 “辮子戲” 的文化反思與價值重構

前陣子播出的《人生若如初見》刻意美化晚清封建統治階級,淡化甚至掩蓋清政府閉關鎖國、喪權辱國、殘酷壓迫民眾等歷史真相,將本應批判反思的腐朽統治包裝成值得歌頌的對象;在歷史敘事上,或通過虛構、篡改重要歷史事件和人物形象&a…

MCP-server

💡 說明:該模塊是 MCP 服務器的 數據中繼層,確保安全高效地從分布式來源獲取模型及其上下文,適用于邊緣計算和聯邦學習場景。若要查看完整代碼,建議直接訪問 GitHub 鏈接

第3講、LangChain性能優化:上下文緩存與流式響應實戰指南

目錄 概述上下文緩存優化流式響應優化復雜對話場景性能優化用戶體驗優化策略完整實現示例性能監控與調優總結 概述 在復雜對話場景中,大型語言模型面臨著響應延遲、重復計算、上下文管理等挑戰。本文將詳細介紹如何通過LangChain的上下文緩存和流式響應功能來優化…

http中GET和POST、PUT之間的區別

在HTTP協議中,GET、POST和PUT是三種最常用的請求方法,它們的主要區別如下: 1. GET 用途:用于請求資源(查詢數據),不應修改服務器狀態。 參數傳遞:通過URL的查詢字符串(…

埃夫特各種系列機器人運動學建模、軌跡規劃和工作空間求解

要求: 1.理論分析 1.1 正向運動學:根據D-H法完成機器人的正向運動學(數學建模后基于Matlab計算公式); 1.2 工作空間分析:根據正向運動學結果,運用 MATLAB進行工作空間分析,完成工…

VUE3 路由的跳轉方法

Routerlink跳轉方法 name屬性對應了路由文件配置的name path屬性對應了路由的路徑 <RouterLink to"/login">點擊跳轉登陸</RouterLink> <RouterLink :to"{name:login}">點擊跳轉登陸</RouterLink> <RouterLink :to"{pat…

數據庫中間件ShardingSphere5

一、高性能架構模式 數據庫集群&#xff0c;第一種方式“讀寫分離”&#xff0c;第二種方式“數據庫分片”。 1.1 讀寫分離架構 讀寫分離原理&#xff1a;將數據庫讀寫操作分散到不同的節點上。 讀寫分離的基本實現&#xff1a; 主庫負責處理事務性的增刪改操作&#xff0c…

C++11 右值引用(Rvalue Reference)

在 C++11 中,右值引用(Rvalue Reference) 是一個革命性的語言特性,它為現代 C++ 的性能優化、資源管理以及語義清晰化奠定了基礎。通過引入 T&& 語法,C++11 支持了 移動語義(Move Semantics) 和 完美轉發(Perfect Forwarding),極大地提升了程序效率和代碼表達…

skynet源碼學習-skynet_main入口

skynet源碼學習-skynet_main入口 核心功能與啟動流程Shell腳本啟動示例main函數參數處理其他相關聯函數解析1. 配置加載器解析2. 環境變量設置3. 配置解析函數 核心配置項解析典型配置文件分析服務啟動與運行核心服務啟動流程完整啟動時序圖 核心功能與啟動流程 Skynet 的啟動…

前端圖文混排頁面一鍵導出PDF最佳實踐 —— 以Vue3+html2pdf.js為例

前言 在現代管理系統中,數據的歸檔、分享和線下流轉需求日益增長。如何將前端頁面的圖文內容高質量導出為PDF,成為許多企業和開發者關注的技術點。本文以實際項目為例,系統梳理前端導出PDF的完整實現思路與優化經驗。 一、項目背景與需求分析 1.1 背景故事 在某管理系統的…

19|Whisper+ChatGPT:請AI代你聽播客

今天&#xff0c;我們的課程開始進入一個新的主題了&#xff0c;那就是語音識別。過去幾周我們介紹的ChatGPT雖然很強大&#xff0c;但是只能接受文本的輸入。而在現實生活中&#xff0c;很多時候我們并不方便停下來打字。很多內容比如像播客也沒有文字版&#xff0c;所以這個時…

linux常用設置

1&#xff0c;ubuntu設置ssh-agent進入shell時自動加載 一&#xff0c;添加自動加載腳本&#xff0c;vim /etc/profile.d/keychain.sh # /etc/profile.d/keychain.sh # 自動啟動 ssh-agent 并加載多個私鑰 export KEYCHAIN_HOME"/root/.keychain" # 多個key&#xf…

電子電氣架構 --- 軟件供應商如何進入OEM體系

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 簡單,單純,喜歡獨處,獨來獨往,不易合同頻過著接地氣的生活,除了生存溫飽問題之外,沒有什么過多的欲望,表面看起來很高冷,內心熱情,如果你身…