文章目录
- 一.前言
- 二.相关知识
- 1.PyQt5
- 2.sqlite3
- 三.效果预览
- 1.登录
- 2.注册
- 3.普通用户身份权限
- 4.管理员身份权限
- 三、技术讨论
- 1.数据展示表格
- 1. 更强的表现力和交互性(前端功能丰富)
- 2. 数据处理效率更高(支持大数据量)
- 3. 美观且易于自定义(前端 UI 更现代)
- 4. 功能扩展性强
- 5. **跨平台一致性更好**
- 2.数据表
- 四.总结
此系统为粉丝定制化开发,旨在于练习数据库使用,欢迎各位粉丝私聊博主了解软件!
一.前言
下面是粉丝大概的需求,接下来我会根据我的理解结合需求来实现整个系统,本篇博客将会详细介绍系统实现思路以及开发流程。
做的是网页管理系统
用qt5做的UI界面,要求数据方面连接数据库
有登录和注册功能
用户上分为管理员和普通用户
用户界面有
网址浏览,已有的网址浏览
查询,查询网址
上传,上传没有的网址
修改密码
管理员界面有
审核,对用户提交的网址进行审核
管理用户,对用户的账号进行管理
修改密码
网页对象包括属性:封面(要是麻烦就不做了),站名,网址,介绍
查询功能只查询网址这个属性
所有数据都保存在数据库里
二.相关知识
1.PyQt5
PyQt5 是 Python 绑定 Qt 应用程序框架的一个库,它用于开发跨平台的桌面应用程序。PyQt5 由 Riverbank Computing 维护,基于 Qt 5 框架,提供了丰富的 GUI 组件和强大的功能,包括窗口控件、布局管理、信号槽机制、多线程支持、绘图、网络编程等。
PyQt5 的特点:
✅ 跨平台支持:可在 Windows、macOS 和 Linux 上运行。
✅ 强大的 GUI 组件:提供 Qt Designer 可视化设计 UI,支持拖拽控件布局。
✅ 信号槽机制:提供高效的事件处理系统,使 UI 响应更加流畅。
✅ QSS 样式表:类似 CSS,可以美化 UI 组件。
✅ 集成多媒体支持:基于 QtMultimedia,可实现音频、视频播放功能。
摘自chat GPT
2.sqlite3
Python3 的 sqlite3 模块是 Python 标准库中内置的数据库接口,用于操作 SQLite 数据库。SQLite 是一种轻量级的关系型数据库,特点是无需安装服务器,数据直接保存在本地文件中,非常适合小型应用、原型开发或本地数据存储。通过 sqlite3 模块,你可以轻松地创建数据库、执行 SQL 语句、插入和查询数据,同时支持参数化查询、防止 SQL 注入,并且遵循 DB-API 2.0 规范。
正如大家所见,此数据库轻若羽毛。
三.效果预览
接下来我将使用贴图的方式展示本系统所有功能以及功能点。
1.登录
首先呢用户需要登录到系统才能使用软件的正式功能,我们设计了简约的登录界面,能给用户一种“我们的系统很简约”的心理暗示,背景色采用浅蓝色结合我们的主题“网站网址管理”,背景图上是上网的标志“e”,也就是explore,我们的系统定义为“NetBox 管理平台”,简单直观地就能让用户了解到我们系统的大致作用,在系统中文名下方是英文名称,左侧是我们系统的Logo,这里的logo取自Chrome的图标,登录界面中间区域是信息填写区域,用户需要填写具体的用户名和与之匹配的密码,通过选择身份的方式登录不同的系统角色账号,在用户确认信息无误之后点击登录按钮进行登录操作,我们的系统校验通过后即可跳转到软件核心主界面。
2.注册
未注册的用户可以通过注册的方式注册新账号,注册页面只支持用户身份注册,管理员的注册按钮点击后会提示“注册管理员请联系超级管理员!”也就是说管理员账户需要特殊的权限才能够注册,普通身份无法直接注册成管理员,只能注册为普通用户。用户输入了用户名以及确认了密码之后点击确定按钮,系统会对用户输入的信息进行校验,具体校验项包括:用户是否被注册、密码是否匹配、身份是否正确…
3.普通用户身份权限
普通用户身份登录成功后到软件主界面,可以进行如下操作:
- 用户系统操作:退出登录、退出系统
- 对现有的网址进行查看,包括网址审核状态、网址条目
- 删除目标网址 即取消网址审核状态提交,用户通过在表格中多选url的方式对目标网址进行删除操作
- 上传新网址,顾名思义,用户可以选择指定类型的本地文件来进行网址的审核提交
我们的系统支持三种类型的文件:TXT、CSV、Excel
文件内容格式见下图(CSV):
4.管理员身份权限
管理员拥有本系统的最高身份权限,但是不支持网址上传操作,因为不能自己审核自己,管理员的权限主要是:
- 用户管理:鸟瞰整个用户数据表格数据,查看所有用户的身份、网址数据量
- 网址审核:对于用户提交的网址内容进行审核,可以直接标记目标网址的状态:通过、不通过,支持网址的删除操作
- 登录日志管理:查看所有用户的登录日志信息,包括的数据项为:用户ID、用户名、身份、登录时间、IP地址
这里截图一张,展示一下系统核心功能:
三、技术讨论
1.数据展示表格
本次数据的展示并没有使用传统的PyQt5的QTableWidget二维数据表,而是使用了QWebEngine封装的datatables,这样做的好处有很多:
1. 更强的表现力和交互性(前端功能丰富)
DataTables
支持列排序、分页、搜索、筛选、高亮显示等功能,开箱即用。- 可以轻松实现列宽自适应、列固定、合并单元格、行内编辑等复杂操作。
- 插件生态丰富,如按钮导出(CSV、Excel)、打印、列拖动等插件。
2. 数据处理效率更高(支持大数据量)
QTableWidget
在处理上千行数据时容易变卡,性能差。DataTables
使用虚拟 DOM 和分页显示,渲染效率明显更高,尤其适合上万行数据展示。
3. 美观且易于自定义(前端 UI 更现代)
- 可以使用 HTML/CSS/Bootstrap 等前端技术美化表格外观。
- 支持响应式设计,自适应不同窗口大小。
4. 功能扩展性强
- 可以嵌入图表(如 Chart.js)、链接、按钮、下拉菜单等组件。
- 可以和后端数据动态交互(AJAX 数据源),比如结合 Flask、FastAPI 实时刷新数据。
5. 跨平台一致性更好
- 基于 Web 技术,在 Windows、Linux、macOS 下表现几乎完全一致。
- 可拓展为 Web 应用的一部分,统一 UI 和逻辑。
2.数据表
这里说的是SQLite3的数据表,我们的系统是基于SQLite3的,里面包括三张数据表,分别是:
用户信息表
CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT,username TEXT NOT NULL UNIQUE,password TEXT NOT NULL,role INTEGER NOT NULL CHECK (role IN (1, 2))
);
用户日志表
CREATE TABLE IF NOT EXISTS user_login_logs (id INTEGER PRIMARY KEY AUTOINCREMENT,user_id INTEGER NOT NULL, -- 用户 IDlogin_time TEXT NOT NULL, -- 登录时间ip_address TEXT -- 登录的 IP 地址
);
用户url审核表
CREATE TABLE IF NOT EXISTS user_urls (id INTEGER PRIMARY KEY AUTOINCREMENT,user_id INTEGER NOT NULL,url TEXT NOT NULL,icon_base64 TEXT,`desc` TEXT,`title` TEXT,upload_time INTEGER,status INTEGER default 0,--- 0未审核 1审核通过 2审核未通过UNIQUE(user_id, url)
);
下图为用户url审核表截图内容:
四.总结
本次和大家详细分享了我为粉丝定制化开发的“PyQt5+SQLite3的网址审核系统”,此系统非常适合用来作为数据库大作业或者PyQt5项目练习,系统整体实现不难,主要是得有整体架构开发思路,整体代码量约为1700行,主要是PyQt5组件定义花了一些时间,因为本系统不依赖设计师,所有组件都是自定义出来的。最后感谢大家看到这里,如果您也有需求的话欢迎点击下方联系我!