当前位置: 首页 > article >正文

基于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. 注销:

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

相关文章:

基于Python+SQLite实现(Web)验室设备管理系统

实验室设备管理系统 应用背景 为方便实验室进行设备管理,某大学拟开发实验室设备管理系统 来管理所有实验室里的各种设备。系统可实现管理员登录,查看现有的所有设备, 增加设备等功能。 开发环境 Mac OSPyCharm IDEPython3Flask&#xff…...

面试系列|蚂蚁金服技术面【2】

今天继续分享一下蚂蚁金服的 Java 后端开发岗位真实社招面经,复盘面试过程中踩过的坑,整理面试过程中提到的知识点,希望能给正在准备面试的你一些参考和启发,希望对你有帮助,愿你能够获得心仪的 offer ! 第一轮面试完…...

【JavaEE】网络原理之初识

1.❤️❤️前言~🥳🎉🎉🎉 Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的…...

WorkTool 技术解析:企业微信自动化办公的合规实现方案

引言:企业微信生态中的自动化需求 随着企业微信用户规模突破4亿(据腾讯2023年财报),其开放生态催生了自动化办公的技术需求。传统RPA(机器人流程自动化)工具在PC端已广泛应用,但移动端自动化仍…...

从0到1构建AI深度学习视频分析系统--基于YOLO 目标检测的动作序列检查系统:(2)消息队列与消息中间件

文章大纲 原始视频队列Python 内存视频缓存优化方案(4GB 以内)一、核心参数设计二、内存管理实现三、性能优化策略四、内存占用验证五、高级优化技巧六、部署建议检测结果队列YOLO检测结果队列技术方案一、技术选型矩阵二、核心实现代码三、性能优化策略四、可视化方案对比五…...

一文讲通锁标记对象std::adopt_lock盲点

一文讲通锁标记对象std::adopt_lock盲点 1. 核心概念2. 代码详解1. 单个锁2. 多重锁(可以用来预防死锁)3. 条件变量的互斥控制4. 复杂示例: 多生产者-多消费者模型(超纲了, 可不看,哈哈哈哈) 3. 小结 1. 核心概念 在C中, std::adopt_lock是一…...

Vscode工具开发Vue+ts项目时vue文件ts语法报错-红波浪线等

Vscode工具开发Vuets项目时vue文件ts语法报错-红波浪线等 解决方案 问题如题描述,主要原因是开发工具使用的代码检查与项目的中的ts不一致导导致,解决办法,修改 vscode 中, 快捷键:command shift p, 输入&#xff…...

Mac下安装Zed以及Zed对MCP(模型上下文协议)的支持

Zed是当前新流行的一种编辑器,支持MCP(模型上下文协议) Mac下安装Zed比较简单,直接有安装包,在这里: brew install --cask zedMac Monterey下是可以安装上的,亲测有效。 配置 使用CtrlShiftP…...

ROS实践(五)机器人自动导航(robot_navigation)

目录 一、知识点 1. 定位 2. 路径规划 (1)全局路径规划 (2)局部路径规划 3. 避障 二、常用工具和传感器 三、相关功能包 1. move_base(决策规划) 2. amcl(定位) 3. costmap_2d(代价地图) 4. global_planner(全局规划器) 5. local_planner(局部规划器…...

REDIS生产环境配置

REDIS生产环境配置 REDIS生产环境配置docker-compose文件redis.conf文件 REDIS生产环境配置 docker-compose模式部署生产环境 docker-compose文件 d_redis:image: redis:${REDIS_VERSION}container_name: d_redisvolumes:- ${REDIS_1_CONF_FILE}:/etc/redis.conf:ro- ${DATA_…...

【小沐学Web3D】three.js 加载三维模型(React)

文章目录 1、简介1.1 three.js1.2 react.js 2、three.js React结语 1、简介 1.1 three.js Three.js 是一款 webGL(3D绘图标准)引擎,可以运行于所有支持 webGL 的浏览器。Three.js 封装了 webGL 底层的 API ,为我们提供了高级的…...

软考教材重点内容 信息安全工程师 第19章 操作系统安全保护

19.1.1 操作系统安全概念 一般来说,操作系统的安全是指满足安全策略要求,具有相应的安全机制及安全功能,符合特定的安全标准,在一定约束条件下,能够抵御常见的网络安全威胁,保障自身的安全运行及资源安全。…...

​【C++设计模式】第二十一篇:模板方法模式(Template Method)

注意:复现代码时,确保 VS2022 使用 C17/20 标准以支持现代特性。 算法骨架的标准化定义 1. 模式定义与用途 核心思想 ​模板方法模式:在父类中定义算法的骨架,将某些步骤延迟到子类实现,使得子类不改变算法结构即可…...

【机器学习】基于t-SNE的MNIST数据集可视化探索

一、前言 在机器学习和数据科学领域,高维数据的可视化是一个极具挑战但又至关重要的问题。高维数据难以直观地理解和分析,而有效的可视化方法能够帮助我们发现数据中的潜在结构、模式和关系。本文以经典的MNIST手写数字数据集为例,探讨如何利…...

【Pycharm】Pycharm无法复制粘贴,提示系统剪贴板不可用

我也没有用vim的插件,检查了本地和ubutnu上都没有。区别是我是远程到ubutnu的pycharm,我本地直接控制windowes的pycharm是没问题的。现象是可以从外部复制到pycharm反之则不行。 ctl c ctlv 以及右键 都不行 参考:Pycharm无法复制粘贴&…...

基于python+django+vue.js开发的医院门诊管理系统/医疗管理系统源码+运行

功能介绍 平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。源码 功能包括:医生管理、科室管理、护士管理、住院管理、药品管理、用户管理、日志管理、系统信息模块。 源码地址 https://github.com/geee…...

Spring Boot整合RabbitMQ极简教程

一、消息队列能解决什么问题? 异步处理:解耦耗时操作(如发短信、日志记录)流量削峰:应对突发请求,避免系统过载应用解耦:服务间通过消息通信,降低依赖 二、快速整合RabbitMQ 1. 环…...

Flink-学习路线

最近想学习一下Flink,公司的实时需求还是不少的,因此结合ai整理了一份学习路线,记录一下。 当然,公司也有Scala版本Flink框架,也学习了一下。这里只说Java版本 1. Java基础 目标: 掌握Java编程语言的基础知识。 内容…...

Atcoder ABC397-D 题解

https://atcoder.jp/contests/abc397/tasks/abc397_dhttps://atcoder.jp/contests/abc397/tasks/abc397_d 题目描述: 确定是否存在一对正整数,使得 思路: 首先对方程进行转化 设 即 接下来确定的范围 根据立方差公式 因此,我们可以从到来…...

K8S学习之基础二十七:k8s中daemonset控制器

k8s中DaemonSet控制器 ​ DaemonSet控制器确保k8s集群中,所有节点都运行一个相同的pod,当node节点增加时,新节点也会自动创建一个pod,当node节点从集群移除,对应的pod也会自动删除。删除DaemonSet也会删除创建的pod。…...

电机控制常见面试问题(八)

文章目录 一、解释什么是矢量控制及其优势二、 如何设计一个电机控制系统的开环和闭环控制?请给出具体案例三.如何通过软件模拟来优化电机控制设计四. 请解释电机过流保护过压保护过温保护等保护机制五.你熟悉哪些电机驱动拓扑结构六.解释空间适量脉宽调制的原理 一…...

保持docker内容器一直运行

首先:确保Docker服务配置为开机自启,这样当虚拟机启动时,Docker也会启动,并按照设定的重启策略自动启动相关容器。 sudo systemctl enable docker 创建容器时: 当你使用docker run命令启动容器时,可以添…...

神经网络的基本知识

感知机 输入:来自其他 n 个神经元传递过来的输入信号 处理:输入信号通过带权重的连接进行传递, 神经元接受到总输入值将与神经元的阈值进行比较 输出:通过激活函数的处理以得到输出 感知机由两层神经元组成, 输入层接受外界输入信号传递给…...

PostgreSQL技术内幕26:PG聚合算子实现分析

文章目录 0.简介1.概念说明2.朴素聚集3.Group by聚集3.1 哈希聚集3.2 分组聚集 0.简介 聚合算子在聚合函数在数据分析、报告生成和统计计算中扮演着重要角色,通过对多行数据进行计算,将多个输入值压缩为单一输出值,如求和、平均值、计数等。…...

【RS】OneRec快手-生成式推荐模型

note 本文提出了一种名为 OneRec 的统一生成式推荐框架,旨在替代传统的多阶段排序策略,通过一个端到端的生成模型直接生成推荐结果。OneRec 的主要贡献包括: 编码器-解码器结构:采用稀疏混合专家(MoE)架构…...

AVL树的平衡算法的简化问题

AVL树是一种紧凑的二叉查找树。它的每个结点,都有左右子树高度相等,或者只相差1这样的特性。文章https://blog.csdn.net/aaasssdddd96/article/details/106291144给出了一个例子。 为了便于讨论,这里对AVL树的结点平衡情况定义2个名称&#…...

mac安装navicat及使用

0.删除旧的 sudo rm -Rf /Applications/Navicat\ Premium.app sudo rm -Rf /private/var/db/BootCaches/CB6F12B3-2C14-461E-B5A7-A8621B7FF130/app.com.prect.NavicatPremium.playlist sudo rm -Rf ~/Library/Caches/com.apple.helpd/SDMHelpData/Other/English/HelpSDMIndexF…...

【HTML】二、列表、表格

文章目录 1、列表1.1 无序列表1.2 有序列表1.3 定义列表 2、表格2.1 定义2.2 表格结构标签2.3 合并单元格 1、列表 列表分为: 无序列表有序列表定义列表:一个标题下有多个小分类 1.1 无序列表 ul嵌套li,ul是无序列表,li是列表…...

​​​​​​​大语言模型安全风险分析及相关解决方案

大语言模型的安全风险可以从多个维度进行分类。 从输入输出的角度来看,存在提示注入、不安全输出处理、恶意内容生成和幻觉错误等风险; 从数据层面来看,训练数据中毒、敏感信息泄露和模型反演攻击是主要威胁; 模型自身则面临拒绝服务和盗窃的风险; 供应链和插件的不安全引…...

windows平台的ffmpeg编译使用

windows平台的ffmpeg编译使用 一、现状 本人使用libgdx开发galGame,发现扩展包gdx-video不支持mp4,不能忍,正好看到官网有支持自定义编译的文档,所以操作一下,自定义编译。本文重点在于操作windows平台,linux平台太简单了。 整个过程包括如下几个步骤。 二、代码下载…...