實驗室設備管理系統
應用背景
為方便實驗室進行設備管理,某大學擬開發實驗室設備管理系統 來管理所有實驗室里的各種設備。系統可實現管理員登錄,查看現有的所有設備, 增加設備等功能。
開發環境
- Mac OS
- PyCharm IDE
- Python3
- Flask(Web框架)
- SQLite(數據庫)
運行方法
準備
- 安裝virtualenv:
pip3 install virtualenv
- 創建虛擬環境:
virtualenv venv
- 進虛擬環境:
source venv/bin/activate
- 安裝依賴的包:
pip install -r requirements.txt
- 退出虛擬環境:
deactivate
運
- 更新數據庫:
python app.py db upgrade
- 成戶:
python app.py init
- 運:
python app.py runserver
初始管理員賬戶
郵箱:zhaowrenee@gmail.com
密碼:666666
功能結構
- 登錄:管理員可以通過輸入預置的賬號密碼進行登錄。
- 查看設備列表:管理員在登錄成功后,應立即展示所有設備信息,設備 信息應包括設備 ID 號,設備名,實驗室名,購置時間,購置人。
- 增加設備:增加設備時應輸入設備名,實驗室名,購置人等信息,設備 增加成功后自動返回系統分配的設備 ID 號,購置時間應為系統自動生成(默認為增加設備的時間)。
- [附加] 刪除設備:管理員本人購置的設備具有頂級重要性,故不能被刪除
- [附加] 搜索設備:輸入關鍵詞,顯示名稱中包含關鍵詞的設備列表
另外保證:
- 對輸入數據進行合法性驗證,并進行友好提示。
- 對數據庫中的密碼字段加密處理。
提示
- 設備 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. 注銷:
完成操作后點擊注銷,即可退出登錄,此時返回登錄頁面,因為之前選擇了記住密碼,下次可直接登錄。