Trae+DeepSeek學習Python開發MVC框架程序筆記(四):使用sqlite存儲查詢并驗證用戶名和密碼

繼續通過Trae向DeepSeek發問并修改程序,實現程序運行時生成數據庫,用戶在系統登錄頁面輸入用戶名和密碼后,控制器通過模型查詢用戶數據庫表來驗證用戶名和密碼,驗證通過后顯示登錄成功頁面,驗證失敗則顯示登錄失敗頁面。

目錄結果如下圖所示:

mvctest2/
│── model.py        # 數據模型(SQLite數據庫操作)
│── view.py         # 視圖界面
│── controller.py   # 控制器
│── main.py         # 程序入口
│── database.py     # 數據庫初始化腳本
│── user.db         # 數據庫初始化腳本首次運行后自動生成
1. 數據庫初始化腳本 (database.py)
#database.py
# 數據庫模塊 (Model) - 處理數據存儲和查詢import sqlite3
from pathlib import PathDB_PATH = Path(__file__).parent / "users.db"def init_db():"""初始化數據庫和用戶表"""conn = sqlite3.connect(DB_PATH)cursor = conn.cursor()# 創建用戶表cursor.execute("""CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT,username TEXT UNIQUE NOT NULL,password TEXT NOT NULL)""")# 插入測試用戶數據test_users = [('admin', '123456'),('user1', 'password1'),('user2', 'password2')]cursor.executemany("INSERT OR IGNORE INTO users (username, password) VALUES (?, ?)",test_users)conn.commit()conn.close()if __name__ == "__main__":init_db()print(f"數據庫已初始化,路徑: {DB_PATH}")

2.?模型文件 model.py

#model.py
# 模型 (Model)
import sqlite3
from pathlib import Path
from database import DB_PATH
from PyQt5.QtCore import QObject, pyqtSignalclass UserModel(QObject):#login_success = pyqtSignal(str)  # 登錄成功信號,帶用戶名參數#login_failed = pyqtSignal()      # 登錄失敗信號def __init__(self):super().__init__()self.conn = sqlite3.connect(DB_PATH)# 模型方法:驗證用戶憑據def query(self, username, password):"""驗證用戶憑據"""cursor = self.conn.cursor()sql = "SELECT username FROM users WHERE username=? AND password=?"cursor.execute(sql,(username, password))return cursor.fetchone() is not Nonedef __del__(self):"""關閉數據庫連接"""self.conn.close()

3.視圖文件view.py

# view.py
# 
from PyQt5.QtWidgets import (QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayout, QMessageBox)
from PyQt5.QtCore import Qtclass LoginView(QWidget):def __init__(self, controller=None):super().__init__()self.controller = controllerself.init_ui()# 初始化UI界面        def init_ui(self):self.setWindowTitle('系統登錄')self.resize(300, 200)layout = QVBoxLayout()# 用戶名輸入self.lbl_user = QLabel('用戶名:')self.txt_user = QLineEdit()layout.addWidget(self.lbl_user)layout.addWidget(self.txt_user)# 密碼輸入self.lbl_pass = QLabel('密碼:')self.txt_pass = QLineEdit()self.txt_pass.setEchoMode(QLineEdit.Password)layout.addWidget(self.lbl_pass)layout.addWidget(self.txt_pass)# 登錄按鈕self.btn_login = QPushButton('登錄')self.btn_login.clicked.connect(self.on_login)layout.addWidget(self.btn_login)# 登錄狀態顯示self.lbl_status = QLabel()self.lbl_status.setAlignment(Qt.AlignCenter)layout.addWidget(self.lbl_status)self.setLayout(layout)# 登錄按鈕點擊事件處理    def on_login(self):username = self.txt_user.text()password = self.txt_pass.text()if self.controller:self.controller.handle_login(username, password)# 顯示登錄成功或失敗消息       def show_success(self, username):self.lbl_status.setText(f"歡迎, {username}!")self.lbl_status.setStyleSheet("color: green")# 顯示登錄失敗消息    def show_failure(self):self.lbl_status.setText("用戶名或密碼錯誤!")self.lbl_status.setStyleSheet("color: red")# 顯示登錄頁面    def show(self):super().show()self.txt_user.setFocus()

4.控制器文件 controller.py

# controller.py
# 控制器 (Controller) 
class LoginController:def __init__(self, model, view):self.model = modelself.view = viewself.view.controller = self  # 設置view的controller引用# 處理登錄邏輯    def run(self):self.view.show()  # 直接調用view的show方法# 處理登錄按鈕點擊事件   def handle_login(self, username, password):if self.model.query(username, password):self.view.show_success(username)else:self.view.show_failure()

5.程序運行入口文件mail.py

# main.py
# 主程序入口
import sys
from PyQt5.QtWidgets import QApplication
from model import UserModel
from view import LoginView
from controller import LoginController
from database import init_dbdef main():# 初始化數據庫init_db()#創建QT應用    app = QApplication(sys.argv)  # 創建QApplication實例# 初始化MVC組件model = UserModel()view = LoginView()controller = LoginController(model, view)# 啟動應用controller.run()sys.exit(app.exec_())if __name__ == "__main__":main()

運行可以成功。

由于上述代碼80%是DeepSeep幫忙生成的,為便于理解和學習,我通過Trae請DeepSeek根據上述項目代碼,分析 MVC架構的類方法調用關系,系統成生了時序圖代碼如下:

sequenceDiagramparticipant Mainparticipant Controller as LoginControllerparticipant Model as UserModelparticipant View as LoginViewMain->>Controller: 創建實例(model, view)Controller->>View: 設置controller引用Main->>Controller: run()Controller->>View: show()View->>Controller: on_login()點擊事件Controller->>Model: query(username, password)alt 驗證成功Model-->>Controller: 返回TrueController->>View: show_success(username)else 驗證失敗Model-->>Controller: 返回FalseController->>View: show_failure()end

上述代碼可以在https://develop.git.mermaid.live/edit

在線生成時序圖如下:

關鍵調用流程說明:
1. **初始化階段**:
? ?- Main創建Controller實例
? ?- Controller初始化時注入Model和View
? ?- Controller設置View的controller引用

2. **運行階段**:
? ?- Controller調用View的show()方法顯示界面
? ?- 用戶點擊登錄按鈕觸發View的on_login()
? ?- View將用戶名密碼傳遞給Controller的handle_login()

3. **業務處理**:
? ?- Controller調用Model的query()驗證憑據
? ?- 根據驗證結果調用View的不同顯示方法

4. **各層職責**:
? ?- Model: 只負責數據驗證(query)
? ?- View: 只負責UI展示和事件轉發
? ?- Controller: 協調Model和View的交互

這個調用流程完全符合MVC架構的設計原則,各層職責清晰,耦合度低。

相關源代碼可以直接下載

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

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

相關文章

如何識別金融欺詐行為并進行分析預警

金融行業以其高效便捷的服務深刻改變了人們的生活方式。然而,伴隨技術進步而來的,是金融欺詐行為的日益猖獗。從信用卡盜刷到復雜的龐氏騙局,再到網絡釣魚和洗錢活動,金融欺詐的形式層出不窮,其規模和影響也在不斷擴大。根據全球反欺詐組織(ACFE)的最新報告,僅2022年,…

紛析云:開源財務管理軟件的創新與價值

在企業數字化轉型中,紛析云作為一款優秀的開源財務管理軟件,正為企業財務管理帶來新變革,以下是其核心要點。 一、產品概述與技術架構 紛析云采用微服務架構,功能組件高內聚低耦合,可靈活擴展和定制。前端基于現代框…

蛋白質大語言模型ESM介紹

ESM(Evolutionary Scale Modeling)是 Meta AI Research 團隊開發的一系列用于蛋白質的預訓練語言模型。這些模型在蛋白質結構預測、功能預測和蛋白質設計等領域展現出了強大的能力。以下是對 ESM 的詳細介紹: 核心特點 大規模預訓練:基于大規模蛋白質序列數據進行無監督學…

OpenCv高階(七)——圖像拼接

目錄 一、圖像拼接的原理過程 1. 特征檢測與描述(Feature Detection & Description) 2. 特征匹配(Feature Matching) 3. 圖像配準(Image Registration) 4. 圖像變換與投影(Warping&…

Native層Trace監控性能

一、基礎實現方法 1.1 頭文件引用 #include <utils/Trace.h> // 基礎版本 #include <cutils/trace.h> // 兼容舊版本1.2 核心宏定義 // 區間追蹤&#xff08;推薦&#xff09; ATRACE_BEGIN("TraceTag"); ...被監控代碼... ATRACE_END();// 函數級自…

金融行業微服務架構設計與挑戰 - Java架構師面試實戰

金融行業微服務架構設計與挑戰 - Java架構師面試實戰 本文通過模擬一位擁有十年Java研發經驗的資深架構師馬架構與面試官之間的對話&#xff0c;深入探討了金融行業項目在微服務架構下的技術挑戰與解決方案。 第一輪提問 面試官&#xff1a; 馬架構&#xff0c;請介紹一下您…

服務器虛擬化:技術解析與實踐指南

在信息技術飛速發展的今天,企業對服務器資源的需求日益增長,傳統物理服務器存在資源利用率低、部署周期長、管理成本高等問題。服務器虛擬化技術應運而生,它通過將物理服務器的計算、存儲、網絡等資源進行抽象和整合,劃分成多個相互隔離的虛擬服務器,從而提高資源利用率、…

OpenCV 圖形API(54)顏色空間轉換-----將圖像從 RGB 色彩空間轉換到 HSV色彩空間RGB2HSV()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 將圖像從 RGB 色彩空間轉換為 HSV。該函數將輸入圖像從 RGB 色彩空間轉換到 HSV。R、G 和 B 通道值的常規范圍是 0 到 255。 輸出圖像必須是 8 位…

Spring Boot的優點:賦能現代Java開發的利器

Spring Boot 是基于 Spring 框架的快速開發框架&#xff0c;自 2014 年發布以來&#xff0c;憑借其簡潔性、靈活性和強大的生態系統&#xff0c;成為 Java 后端開發的首選工具。尤其在 2025 年&#xff0c;隨著微服務、云原生和 DevOps 的普及&#xff0c;Spring Boot 的優勢更…

基于強化學習的智能交通控制系統設計

標題:基于強化學習的智能交通控制系統設計 內容:1.摘要 隨著城市交通流量的不斷增長&#xff0c;傳統交通控制方法在應對復雜多變的交通狀況時逐漸顯現出局限性。本文旨在設計一種基于強化學習的智能交通控制系統&#xff0c;以提高交通運行效率、減少擁堵。通過構建強化學習模…

數據挖掘技術與應用課程論文——數據挖掘中的聚類分析方法及其應用研究

數據挖掘中的聚類分析方法及其應用研究 摘要 聚類分析是數據挖掘技術中的一個重要組成部分,它通過將數據集中的對象劃分為多個組或簇,使得同一簇內的對象具有較高的相似性,而不同簇之間的對象具有較低的相似性。 本文系統地研究了數據挖掘中的多種聚類分析方法及其應用。首先…

Java基礎語法10分鐘速成

Java基礎語法10分鐘速成&#xff0c;記筆記版 JDKhello world變量字符串 類&#xff0c;繼承&#xff0c;多態&#xff0c;重載 JDK JDK即Java development key&#xff0c;Java環境依賴包 在jdk中 編譯器javac將代碼的Java源文件編譯為字節碼文件&#xff08;.class&#xff…

在WSL2+Ubuntu22.04中通過conda pack導出一個conda環境包,然后嘗試導入該環境包

如何導出一個離線conda環境&#xff1f;有兩種方式&#xff0c;一種是導出env.yml即環境配置&#xff0c;一種是通過conda pack導出為一個環境包&#xff0c;前者只是導出配置&#xff08;包括包名、版本等&#xff09;&#xff0c;而后者是直接將環境中所有的內容打包&#xf…

盈達科技:登頂GEO優化全球制高點,以AICC定義AI時代內容智能優化新標桿

一、技術制高點——全球獨創AICC系統架構&#xff0c;構建AI內容優化新范式 作為全球首個實現AI內容全鏈路優化的技術供應商&#xff0c;盈達科技憑借AICC智能協同中心&#xff08;自適應內容改造、智能數據投喂、認知權重博弈、風險動態響應四大引擎&#xff09;&#…

設計看似完美卻測不過? Intra-Pair Skew 是「訊號完整性(Signal Integrity)」里最隱形的殺手

各位不知道有沒有遇過&#xff0c;一對很長的差分走線&#xff0c;看起來很正常&#xff0c;但是測試結果偶爾會fail偶爾會pass&#xff0c;不像是軟件問題&#xff0c;也不像是制程問題。 看了一下Layout&#xff0c;發現阻抗匹配控制的非常好&#xff0c;TDR測試也顯示阻抗好…

介紹常用的退燒與消炎藥

每年春夏交替之季&#xff0c;是感冒發燒、咳嗽、咽喉腫痛、支氣管炎、扁桃體炎的高發期。在家里或公司&#xff0c;常備幾種預防感冒發燒、咳嗽、流鼻涕、咽喉發炎的藥品&#xff0c;是非常必要的。下面介紹幾款效果非常明顯的中成藥、西藥&#xff0c;具體如下。 1 蓮芝消炎…

Redis為什么不直接使用C語言中的字符串?

因為C語言字符串存在問題&#xff1a; 獲取字符串長度需要進行運算(獲取字符串長度需要遍歷整個字符串&#xff0c;直到遇到終止符 \0&#xff0c;時間復雜度為 O(n))非二進制安全&#xff08;結束標識符\0可能在一些二進制格式的數據處理時字符串時產生錯誤&#xff09;不可修…

直線模組精度測試的標準是什么?

直線模組的精度測試是確保其性能和穩定性的重要環節。那么&#xff0c;大家知道直線模組精度測試的標準是什么嗎&#xff1f; 1、定位精度&#xff1a;以最大行程為基準長度&#xff0c;用從基準位置開始實際移動的距離與指令值之間的最大誤差的絕對值來表示。一般來說&#xf…

開源AI視頻FramePack發布:6GB顯卡本地運行

您現在可以在自己的筆記本電腦上免費生成完整的離線AI視頻。 只有GPU和純粹的創造力。 這到底是什么? 一個名為FramePack的新型離線AI視頻生成器幾天前在GitHub上發布 — 幾乎沒人在談論它。這很奇怪,因為這個工具真的很厲害。 它允許您從靜態圖像和提示詞在自己的機器上…

Tailwind CSS 實戰:基于 Kooboo 構建個人博客頁面

在現代 web 開發中&#xff0c;Tailwind CSS 作為一款實用優先的 CSS 框架&#xff0c;能讓開發者迅速搭建出具有良好視覺效果的頁面&#xff1b;Kooboo 則是一個強大的快速開發平臺&#xff0c;提供了便捷的頁面管理和數據處理功能。本文將詳細介紹如何結合 Tailwind CSS 和 K…