基于Python+SQLite實現(Web)驗室設備管理系統

實驗室設備管理系統

應用背景

為方便實驗室進行設備管理,某大學擬開發實驗室設備管理系統 來管理所有實驗室里的各種設備。系統可實現管理員登錄,查看現有的所有設備, 增加設備等功能。

開發環境

  • Mac OS
  • PyCharm IDE
  • Python3
  • Flask(Web框架)
  • SQLite(數據庫)

運行方法

準備
  1. 安裝virtualenv: pip3 install virtualenv
  2. 創建虛擬環境: virtualenv venv
  3. 進虛擬環境: source venv/bin/activate
  4. 安裝依賴的包: pip install -r requirements.txt
  5. 退出虛擬環境: deactivate
  1. 更新數據庫: python app.py db upgrade
  2. 成戶: python app.py init
  3. 運: python app.py runserver
初始管理員賬戶

郵箱:zhaowrenee@gmail.com
密碼:666666

功能結構

  1. 登錄:管理員可以通過輸入預置的賬號密碼進行登錄。
  2. 查看設備列表:管理員在登錄成功后,應立即展示所有設備信息,設備 信息應包括設備 ID 號,設備名,實驗室名,購置時間,購置人。
  3. 增加設備:增加設備時應輸入設備名,實驗室名,購置人等信息,設備 增加成功后自動返回系統分配的設備 ID 號,購置時間應為系統自動生成(默認為增加設備的時間)。
  4. [附加] 刪除設備:管理員本人購置的設備具有頂級重要性,故不能被刪除
  5. [附加] 搜索設備:輸入關鍵詞,顯示名稱中包含關鍵詞的設備列表

另外保證:

  1. 對輸入數據進行合法性驗證,并進行友好提示。
  2. 對數據庫中的密碼字段加密處理。

提示

  • 設備 ID 號應保證唯一性。
  • 設備名可重復。

功能細節

一、UML圖

1、活動圖

app.py中function與templates中HTML件對應,展示在頁中:

  • index() 通過 SearchForm 實現對戶信息的檢索和展示,并通過 index.html
  • add_device() 通過 UserForm 實現對新設備信息的添加,并調 add_device.html
  • remove_device(id) 通過id刪除設備,但不能刪除管理員添加的設備
  • login() 通過調 LoginForm 實現登錄,并調 login.html 頁登錄,也是服務器提供的第個頁
  • 其余function對應系列錯誤處理和必要但和數據庫關功能
2、用例圖

3、順序圖

4、類圖

  • HTML使Flask-wtf Bootstrap渲染功能,使界更美觀
  • app.Role為戶設置的用戶或者管理員角類,內部有條件角條件約束
  • app.User 戶類
    • 記錄戶名、密碼、id等信息,與數據庫的屬性進行交互
  • app.Device 設備類
    • 記錄設備名、實驗室、購置人、購置時間等信息,與數據庫的屬性進行交互
  • FlaskForm 信息表
    • 三種Form根據不同的操作需求,設定不同的Field
5、狀態圖

、基本表單的定義

表一:

roles 身份表

名稱

類型

NOT NULL約束

PRIMARY KEY約束

UNIQUE約束

默認

外鍵

id

INTEGER

name

VARCHAR(64)

CREATE TABLE roles (id INTEGER NOT NULL, name VARCHAR(64), PRIMARY KEY (id), UNIQUE (name)
)

表中實體:

id

name

1

User

2

Admin

表二:

users 用戶表

名稱

類型

NOT NULL約束

PRIMARY KEY約束

UNIQUE約束

默認

外鍵

id

INTEGER

number

VARCHAR(128)

username

VARCHAR(64)

password_hash

VARCHAR(128)

role_id

INTEGER

roles(id)

CREATE TABLE users (id INTEGER NOT NULL, number VARCHAR(128), username VARCHAR(64), password_hash VARCHAR(128), role_id INTEGER, PRIMARY KEY (id), UNIQUE (password_hash), FOREIGN KEY(role_id) REFERENCES roles (id)
)

表中實體:

id

number

username

password_hash

role_id

1

zhaowrenee@gmail.com

Admin

pbkdf2:sha256:50000$V4ZV7KEr$42b0a9825baa100fa800d0544632a1ad7d6130504ef6c397ecfa6b02ca99298d

2

2

mshi@hotmail.com

袁帥

pbkdf2:sha256:50000

d1c334fe90415612c0d99301d45f3e5f9c3f482726cde598259d19ff1228c217

1

3

yaoxiuying@mingding.org

劉東

pbkdf2:sha256:50000$rNv7gYzZ$381113b96a85934496fe06a2796893fb85689b71c373e97a5e4d9d3adfd5ef26

1

4

vfan@hotmail.com

吳娟

pbkdf2:sha256:50000$cA7RmNVD$7136167bd1c3163b0ec221638b8644f12f093f3450ecc4f631c72840e26f31f3

1

5

panjuan@hotmail.com

劉玉珍

pbkdf2:sha256:50000$hSqUMhqa$5dd222a191f376127e3dceb8244310cc7114dcceaa2d3bc5fa585a9429f66a02

1

表三:

devices 設備表

名稱

類型

NOT NULL約束

PRIMARY KEY約束

UNIQUE約束

默認

外鍵

id

INTEGER

device_id

VARCHAR(64)

lab

VARCHAR(64)

name

VARCHAR(64)

password_hash

DATETIME

user_id

VARCHAR(64)

users(id)

CREATE TABLE devices (id INTEGER NOT NULL, lab VARCHAR(64), name VARCHAR(64), time DATETIME, user_id VARCHAR(64), PRIMARY KEY (id), FOREIGN KEY(user_id) REFERENCES users (id)
)

表中實體:

id

device_id

lab

name

time

user_id

2

2020-QS-002

趨勢傳媒實驗室

專業VR鏡頭

2020-03-31 22:12:17.000000

6

3

2020-LY-003

凌云科技實驗室

專業VR鏡頭

2020-03-15 02:36:25.000000

6

4

2020-MX-004

盟新傳媒實驗室

聯想啟天2100

2020-03-16 23:44:42.000000

1

5

2020-CH-005

創匯網絡實驗室

DSP實驗箱

2020-01-17 03:29:31.000000

8

6

2020-LT-006

聯通時科網絡實驗室

功率變換器

2020-04-06 07:49:29.000000

3

7

2020-HR-007

鴻睿思博網絡實驗室

雙蹤示波器

2020-03-05 00:48:16.000000

4

8

2020-TY-008

天益科技實驗室

聯想啟天2100

2020-03-03 23:57:45.000000

11

9

2020-LY-009

凌穎信息信息實驗室

投影機

2020-02-03 20:11:21.000000

10

10

2020-DM-010

迪摩科技實驗室

曙光天闊服務器

2020-02-12 20:46:27.000000

1

11

2020-LR-011

聯軟傳媒實驗室

聯想啟天2100

2020-02-21 11:02:09.000000

11

展示后修改及優化說明

1. 對設備ID進行改進

通常設備編號都有其實際含義,而且通常有使用年限的規定。所以我在展示后對ID進行設計,更加符合實際情況。

id的格式為購置年份-實驗室名稱前兩字的拼音大寫字母縮寫-設備編號(三位數補全)

其中,提取實驗室名稱的拼音大寫字母縮寫,我通過利用xpinyin包來完成。

頁面中顯示的“設備編號”為人為構造的“設備id”,區別于數據庫表中自動生成的id。

2. 刪除設備時進行安全性提示

因為增加了刪除設備這一附加功能,而設備刪除是一個具有安全隱患的操作。為了避免發生誤操作的情況,在點擊“刪除”按鈕后系統會提示“確定要刪除嗎?”,此時只有點擊”確定“時才會執行刪除操作。

整體效果及操作流程

1. 登錄頁面:

如果輸入錯誤密碼:

如果輸入非管理員賬號:

2. 查看設備列表:

為了批量生成數據,使用python中的faker包來生成不同類型和格式的隨機數據來模擬真實情形

其中,設定系統的管理員擁有頂級權限,即可以管理設備購置記錄,并且我這里附加了一個功能:其本身購置的設備記錄用紅色背景標出,表明其重要性。

3. 增加設備:

這里對輸入數據進行合法性驗證:

  • 設備名不能為空/長度超出32個字符
  • 購置人必須是數據庫中的用戶,這里主要是為了確保我們擁有購置人的詳細信息(比如說郵箱等),否則我們無法確認購置人的身份、無法聯系到他。

4. 刪除設備:

這里考慮了可能有設備廢棄或者是轉讓,需要刪除設備的情況。

擁有頂級權限的管理員本人購置的設備無法刪除。

5. 關鍵詞搜索:

6. 注銷:

完成操作后點擊注銷,即可退出登錄,此時返回登錄頁面,因為之前選擇了記住密碼,下次可直接登錄。

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

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

相關文章

深拷貝and淺拷貝!

一、什么是拷貝?什么是深拷貝和淺拷貝? (1)拷貝:拷貝就是為了復用原對象的部分or全部數據,在原對象的基礎上通過復制的方式創建一個新的對象。 拷貝對象可以分為三種類型:直接賦值、淺拷貝和深拷…

高頻面試題(含筆試高頻算法整理)基本總結回顧43

干貨分享,感謝您的閱讀! (暫存篇---后續會刪除,完整版和持續更新見高頻面試題基本總結回顧(含筆試高頻算法整理)) 備注:引用請標注出處,同時存在的問題請在相關博客留言…

《靈珠覺醒:從零到算法金仙的C++修煉》卷三·天劫試煉(34)混元金斗裝萬物 - 0-1背包問題(二維DP)

《靈珠覺醒:從零到算法金仙的C++修煉》卷三天劫試煉(34)混元金斗裝萬物 - 0-1背包問題(二維DP) 哪吒在數據修仙界中繼續他的修煉之旅。這一次,他來到了一片神秘的混元谷,谷中有一座巨大的混元金斗,斗身閃爍著神秘的光芒。谷口有一塊巨大的石碑,上面刻著一行文字:“欲…

網絡爬蟲【簡介】

我叫補三補四,很高興見到大家,歡迎一起學習交流和進步 今天來講一講視圖 一、網絡爬蟲的定義 網絡爬蟲(Web Crawler),又稱為網絡蜘蛛、網絡機器人等,是一種按照一定規則自動抓取互聯網信息的程序或腳本。它…

?AI時代到來,對電商來說是效率躍升,還是溫水煮青蛙

?凌晨三點的義烏商貿城,95后創業者小王,靜靜地盯著屏幕上的AI工具,竟露出了笑容。這個月他的跨境玩具店銷量提升了不少,從之前的狀態翻了3倍;而且團隊人數有所變化,從5人縮減到了2人(其中包括他…

PDF文件密碼保護破解:安全解密的步驟與技巧

PDF文件加密后,需要特定的密碼才能訪問內容。以下是一些常見的方法來解密PDF文件: 方法一:使用Adobe Acrobat 如果你有Adobe Acrobat Pro,可以使用它來解密PDF文件。 打開Adobe Acrobat Pro: 啟動Adobe Acrobat Pro…

qt 自帶虛擬鍵盤的編譯使用記錄

一、windows 下編譯 使用vs 命令窗口,分別執行: qmake CONFIG"lang-en_GB lang-zh_CN" nmake nmake install 如果事先沒有 指定需要使用的輸入法語言就進行過編譯,則需要先 執行 nmake distclean 清理后執行 qmake 才能生效。 …

Java開發之數據庫應用:記一次醫療系統數據庫遷移引發的異常:從MySQL到PostgreSQL的“dual“表陷阱與突圍之路

記一次醫療系統數據庫遷移引發的異常:從MySQL到PostgreSQL的"dual"表陷阱與突圍之路 一、驚魂時刻:數據庫切換引發的系統雪崩 某醫療影像系統在進行國產化改造過程中,將原MySQL數據庫遷移至PostgreSQL。遷移完成后,系…

C++刷題(二):棧 + 隊列

📝前言說明: 本專欄主要記錄本人的基礎算法學習以及刷題記錄,使用語言為C。 每道題我會給出LeetCode上的題號(如果有題號),題目,以及最后通過的代碼。沒有題號的題目大多來自牛客網。對于題目的…

精通游戲測試筆記(持續更新)

第一章、游戲測試的兩條規則 不要恐慌 不要將這次發布當作最后一次發布 不要相信任何人 把每次發布當作最后一次發布 第二章:成為一名游戲測試工程師

Windows功能之FTP服務器搭建

一、創作背景 之前有用linux系統搭建過ftp服務器,最近想著用windows系統也順便搭建一個,看網上有第三方服務軟件一鍵部署,記得windows可以不借助第三方軟件就可以搭建,就想順便操作試試,結果老是連接不上,費…

星型組網模塊的兩種交互方式優缺點解析

星型組網模塊簡介 星型組網模塊工作在433MHz頻段;星型組網模塊集主機(協調器)、終端為一體,星型組網模塊具有長距離、高速率兩種傳輸模式,一個主機(協調器)支持多達200個節點與其通訊&#xff0…

二分+前綴和——森林的最大美麗值

森林的最大美麗值(二分差分數組) 題目分析 求最小值的最大值,聯想到二分。 第一階段二段性分析 對于所有樹的高度都可以大于等于mid,那么我們可以確定高度小于mid的值一定也可以,但是此時我需要找的是最大的高度,那么mid一定比…

Pytorch實現之最小二乘梯度歸一化設計

簡介 簡介:LSGAN提出了一種利用最小二乘法來計算兩個數據分布之間的距離,該論文在此基礎上采用梯度歸一化來進一步穩定訓練。 論文題目:LSN-GAN: A Novel Least Square Gradient Normalization for Generative Adversarial Networks(LSN-GAN:一種新的生成對抗網絡的最小…

JavaScript基礎-全局作用域

在JavaScript編程中,理解變量的作用域是編寫高效、可維護代碼的關鍵之一。全局作用域是指變量在整個程序范圍內都可訪問的狀態,這意味著它們可以在任何函數或代碼塊中被讀取和修改。然而,過度使用全局變量也可能導致一些問題,如命…

【2025.3.13】記一次雙系統筆記本加裝固態硬盤記錄 linux擴容 linux更換/home和/opt所在硬盤 windows無法調整亮度

文章目錄 🌕事情經過🌕更換/home和/opt的掛載硬盤🌙目的🌙初始化1t固態硬盤🌙打開Linux查看硬盤信息🌙給新1t固態硬盤分區🌙格式化分區🌙把新1t固態硬盤先掛載到/mnt/ssd_1t 用于后續…

山東省新一代信息技術創新應用大賽-計算機網絡管理賽項(樣題)

目錄 競賽試題 網絡拓撲 配置需求 虛擬局域網 IPv4地址部署 OSPF及路由部署 配置合適的靜態路由組網 MSTP及VRRP鏈路聚合部署 IPSEC部署 路由選路部署 設備與網絡管理部署 1.R1 2.R2 3.S1 4.S2 5.S3 競賽試題 本競賽使用HCL(華三云實驗室)來進行網絡設備選擇…

【測試語言基礎篇】Python基礎之List列表

一、Python 列表(List) 序列是Python中最基本的數據結構。序列中的每個元素都分配一個數字 - 它的位置,或索引,第一個索引是0,第二個索引是1,依此類推。 Python有6個序列的內置類型,但最常見的是列表和元組。序列都可…

大數據面試之路 (二) hive小文件合并優化方法

大量小文件容易在文件存儲端造成瓶頸,影響處理效率。對此,您可以通過合并Map和Reduce的結果文件來處理。 一、合并小文件的常見場景 寫入時產生小文件:Reduce任務過多或數據量過小,導致每個任務輸出一個小文件。 動態分區插入&…

MySQL 批量插入 vs 逐條插

MySQL 插入數據:批量插入 vs 逐條插入,哪個更快? 在 MySQL 中,插入數據有兩種常見方式: 批量插入:一條 SQL 插入多條數據。逐條插入:每次插入一條數據。 這兩種方式有什么區別?哪…