基于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:50000V4ZV7KEr42b0a9825baa100fa800d0544632a1ad7d6130504ef6c397ecfa6b02ca99298d | 2 |
| 2 | mshi@hotmail.com | 袁帅 | pbkdf2:sha256:50000 d1c334fe90415612c0d99301d45f3e5f9c3f482726cde598259d19ff1228c217 | 1 |
| 3 | yaoxiuying@mingding.org | 刘东 | pbkdf2:sha256:50000rNv7gYzZ381113b96a85934496fe06a2796893fb85689b71c373e97a5e4d9d3adfd5ef26 | 1 |
| 4 | vfan@hotmail.com | 吴娟 | pbkdf2:sha256:50000cA7RmNVD7136167bd1c3163b0ec221638b8644f12f093f3450ecc4f631c72840e26f31f3 | 1 |
| 5 | panjuan@hotmail.com | 刘玉珍 | pbkdf2:sha256:50000hSqUMhqa5dd222a191f376127e3dceb8244310cc7114dcceaa2d3bc5fa585a9429f66a02 | 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. 注销:

完成操作后点击注销,即可退出登录,此时返回登录页面,因为之前选择了记住密码,下次可直接登录。

相关推荐
bigfootyazi16 分钟前
python爬虫-基本库-urllib库(常用速查)
开发语言·爬虫·python
瑶总迷弟30 分钟前
使用 mis-tei 在昇腾310P上部署 bge-m3模型
pytorch·python·华为·语言模型·自然语言处理·cnn·unix
ayqy贾杰43 分钟前
基层管理的三板斧,在AI时代行不通了
前端·后端·团队管理
Apifox44 分钟前
Apifox 5 月更新|Postman 导入优化、Runner 支持非 root 运行、请求代码自动带鉴权
前端·后端·安全
belong_my_offer1 小时前
认识到精通函数
开发语言·python
miaowmiaow1 小时前
PSD2Code 近期更新与深度解析:从设计稿到生产级代码的完整技术栈
前端·人工智能·ai编程
Hilaku1 小时前
多标签页并发请求导致 Token 刷新失败?只有 15行代码就能解决 !
前端·javascript·程序员
Nile1 小时前
解密Palantir系列一:4. Ontology 不是哲学
开发语言·前端·javascript
因_崔斯汀2 小时前
ECharts 区域地图可视化实战:以山东地图为例
前端
ServBay2 小时前
不要再盲选了,PostgreSQL、MySQL与SQLite真实性能对比
数据库·mysql·sqlite