Python应用 | 基于flask-restful+AntDesignVue实现的一套图书管理系统

本文将分享个人自主开发的一套图书管理系统,后端基于Python语言,采用flask-restful开发后端接口,前端采用Vue+AntDesignVue实现。对其他类似系统的实现,比如学生管理系统等也有一定的参考作用。有问题欢迎留言讨论~

关注公众号:仰望天空的蜗牛并回复“图书管理系统”可免费获取前后端源码。系统也已部署上线,实际效果可以浏览器访问网址:http://39.105.117.99/预览。

欢迎关注作者公众号,追踪更多更新更有价值的内容。

—、后端实现

1.1 接口统计

实现有以下9个接口:

1.  /addBook 添加书籍
2.  /queryAllBooks 查询所有书籍
3.  /updateBookValid 更新书籍状态
4.  /addBorrower 添加借阅人
5.  /queryAllBorrowers 查询所有借阅人
6.  /updateBorrowerValid 更新借阅人状态
7.  /borrowBook 借书
8.  /returnBook 还书
9. /queryBookHis 查询书籍借阅历史
1.  /addBook 添加书籍

请求参数示例:

{    "book_name": "苏东坡传", //必填项    "book_code": "book-001", //必填项    "book_author": "林语堂" //必填项}

响应示例(success):

{    "content": "苏东坡传添加成功~",    "result": "success"}
2.  /queryAllBooks 查询所有书籍

请求参数示例:

{}

响应示例(success):

{    "result": "success",    "content": [        {            "id": 1,            "book_name": "苏东坡传",            "book_code": "book-001",            "book_author": "林语堂",            "borrow_status": 1,            "book_valid": 1,            "creation_ts": "20240613115427"        }    ],    "count": 1}
3.  /updateBookValid 更新书籍状态

请求参数示例:​​​​​​​

{    "book_id": 1 //必填项,书籍id}

响应示例(success):​​​​​​​

{    "content": "书籍状态更新成功",    "result": "success"}
4.  /addBorrower 添加借阅人

请求参数示例:​​​​​​​

{    "person_name": "韩梅梅" //必填项,人员姓名}

响应示例(success):​​​​​​​

{    "content": "韩梅梅添加成功~",    "result": "success"}
5.  /queryAllBorrowers 查询所有借阅人

请求参数示例:

{}

响应示例(success):​​​​​​​

{    "result": "success",    "content": [        {            "id": 1,            "person_name": "韩梅梅",            "person_valid": 1,            "creation_ts": "20240613120452"        }    ],    "count": 1}
6.  /updateBorrowerValid 更新借阅人状态

请求参数示例:​​​​​​​

{    "person_id": 1 //必填项,人员id}

响应示例(success):​​​​​​​

{    "content": "人员在/离职状态更新成功",    "result": "success"}
7.  /borrowBook 借书

请求参数示例:​​​​​​​

{    "book_id": 1, //必填项 借阅书籍id    "borrower_id": 1 //必填项,借阅人id}

响应示例(success):​​​​​​​

{    "content": "借书成功",    "result": "success"}
8.  /returnBook 还书

请求参数示例:​​​​​​​

{    "book_id": 1 //必填性,待还书籍id}

响应示例(success):​​​​​​​

{    "content": "还书成功",    "result": "success"}

9.  /queryBookHis 查询书籍借阅历史

请求参数示例:​​​​​​​

{    "book_id": 1 //必填项,目标书籍id}

响应示例(success):​​​​​​​

{    "result": "success",    "content": [        {            "borrower_id": 1,            "borrower_name": "韩梅梅",            "borrower_time": "20240613121948",            "return_time": "20240613122055"        }    ],    "count": 1}

1.2 创建数据库、表

项目使用mysql数据库,数据库安装教程请查询网络资源,非常多安装教程,本文不再做冗余介绍。

安装成功后,首先需创建数据库:test_library,也可以自定义数据库名;

创建数据表books、borrowers和books_borrowers_relation。

books表创建语句,​​​​​​​

CREATE TABLE `books`(            `id` int NOT NULL AUTO_INCREMENT,            `name` varchar(150) NOT NULL COMMENT '书名',            `code` varchar(150) NOT NULL COMMENT '书编码',            `author` varchar(50) NOT NULL COMMENT '书作者',            `status` int NOT NULL DEFAULT '1' COMMENT '书借用状态,1-可借,0-不可借',            `valid` int NOT NULL DEFAULT '1' COMMENT '书籍状态,1-有效,0-无效',            `creation` varchar(50) DEFAULT NULL COMMENT '创建时间,书籍录入到数据库的时间',            PRIMARY KEY (`id`)        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

数据表books存储书籍相关信息。

borrowers表创建语句,​​​​​​​

CREATE TABLE `borrowers`(            `id` int NOT NULL AUTO_INCREMENT,            `name` varchar(150) NOT NULL COMMENT '人员名称',            `valid` int NOT NULL DEFAULT '1' COMMENT '人员状态,1-在职,0-离职',            `creation` varchar(50) DEFAULT NULL COMMENT '创建时间,人员录入到数据库的时间',            PRIMARY KEY (`id`)        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

数据表borrowers存储借阅人信息。

books_borrowers_relation创建语句,​​​​​​​

CREATE TABLE `books_borrowers_relation`(            `id` int NOT NULL AUTO_INCREMENT,            `book_id` int NOT NULL COMMENT '书籍id',            `borrower_id` int NOT NULL COMMENT '人员id',            `valid` int NOT NULL DEFAULT '1' COMMENT '借用关系状态,1-有效,0-无效',            `borrow_time` varchar(50) DEFAULT NULL COMMENT '借用时间',            `return_time` varchar(50) DEFAULT NULL COMMENT '归还时间',            constraint fk_book_id foreign key(book_id) references books(id),            constraint fk_borrower_id foreign key(borrower_id) references borrowers(id),            PRIMARY KEY(`id`)        ) ENGINE = InnoDB DEFAULT CHARSET = utf8;

用于存储书籍和人员借阅记录关系。

1.3 配置文件

通过yaml配置文件对数据库的连接信息进行配置。yaml文件配置内容如下,

图片

其中library_db_name配置为你创建的数据库名,这里是"test_library";library_db_info配置的数据库连接信息,包括host、port、登录用户user和登录密码password等。

配置文件读取,读取yaml文件内容,以字典数据类型返回配置信息,供数据库连接使用。代码实现,​​​​​​​

import yaml
# 读取yaml文件,以字典类型存储def load_yaml(filename):    try:        with open(filename, 'r', encoding='utf-8') as stream:            docs = yaml.load_all(stream, Loader=yaml.FullLoader)            param_dict = dict()            for doc in docs:                for k, v in doc.items():                    param_dict[k] = v            return param_dict    except Exception as e:        print(f"读取配置文件失败\n{e}")

load_yaml(filename)返回的param_dict即是字典类型的配置数据。

图片

二、前端实现

2.1 开发环境准备

安装node.js和npm,安装Vue CLI,npm install -g @vue/cli。创建Vue3项目,

vue create your-project-name

启动项目,

npm run serve

启动项目后,你可以根据提示在浏览器中访问。

项目构建,

npm run build

构建完成,将生成dist目录,把该目录下的内容部署到服务器上。

安装前端框架ant-design-vue,

npm install ant-design-vue --save

安装axios、vue-router,分别用于请求后端接口和前端页面路由配置,

npm install axios vue-router --save

2.2 安装nginx

在服务器中安装nginx,nginx安装教程网上有很多,不再赘述。前端项目构建成功后,放置在nginx配置文件的http server location指定位置即可。

2.3 前端部分页面展示

书籍列表页面:

图片

借阅人列表页面:

图片

添加书籍:

图片

添加借阅人:

图片

借书:

图片

借书记录:

图片

图片

 关注作者微信公众号,追踪更多有价值的内容!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/46106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记一下blender曲线阵列

先说一下如何正常使用这个 这一次我是用来贴瓷砖 随便创建一个mesh 然后添加一个阵列修改器,然后再给他添加一个curve修改器,使用constant offset去偏移他 这里有个小细节 我第一次创建的curve 我选取之后,死活无法沿着曲线阵列&#xff…

.快速幂.

按位与(Bitwise AND)是一种二进制运算,它逐位对两个数的二进制表示进行运算。对于每一位,只有两个相应的位都为1时,结果位才为1;否则,结果位为0。如:十进制9 & 5转化为二进制&am…

ActiveMQ-CVE-2023-46604

Apache ActiveMQ OpenWire 协议反序列化命令执行漏洞 OpenWire协议在ActiveMQ中被用于多语言客户端与服务端通信。在Apache ActvieMQ5.18.2版本以及以前,OpenWire协议通信过程中存在一处反序列化漏洞,该漏洞可以允许具有网络访问权限的远程攻击者通过操作…

opencv 中如何通过欧式距离估算实际距离(厘米)

1:这个方法个人测试觉得是正确的,误差较小,目前满足我当前的需求,如果方法不对,请大家评论,完善。 2:确保拍摄的参照物是垂直的,如果不垂直,就会有误差,不垂…

低代码商城构建专家:Mall-Cook

Mall-Cook:用Mall-Cook,让电商创新触手可及- 精选真开源,释放新价值。 概览 Mall-Cook是一个面向未来的商城低代码开发平台,它通过提供直观的可视化界面,让开发者和商家能够快速构建和部署跨平台的电商解决方案。这个…

微信小程序如何实现登陆和注册功能?

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

服务器提交记录有Merge branch消除

背景:在共同开发分支release上,你提交了commit,push到服务器上时,发现有人先比你push了,所以你得先pull, 后再push,然而pull后自动产生了一个Merge branch的一个commit,这个commit本…

递归解决换零钱问题--回顾总结之递归的表达能力

前面为了保持叙述的流畅, 没有做太多的引申, 把总结推迟到了后面. 补上一些总结, 以防止出现 “下面呢? 下面没有了” 的尴尬. 方向性问题 虽然题目在一开始就暗示了这一点, 但首先, 我们还是要问, 它能用递归解决吗? 有点怀疑精神是好的, 既要低头走路, 更要抬头看路, 以防…

JDK14新特征最全详解

JDK 14一共发行了16个JEP(JDK Enhancement Proposals,JDK 增强提案),筛选出JDK 14新特性。 - 343: 打包工具 (Incubator) - 345: G1的NUMA内存分配优化 - 349: JFR事件流 - 352: 非原子性的字节缓冲区映射 - 358: 友好的空指针异常 - 359: Records…

【JavaScript】解决 JavaScript 语言报错:Uncaught TypeError: XYZ is not iterable

文章目录 一、背景介绍常见场景 二、报错信息解析三、常见原因分析1. 对非数组类型使用 for...of 循环2. 对非可迭代对象使用扩展运算符3. 在 Promise.all 中传递非可迭代对象4. 使用解构赋值时,右侧值非可迭代 四、解决方案与预防措施1. 确保使用可迭代对象2. 使用…

各种Attention|即插即用|适用于YoloV5、V7、V8、V9、V10(一)

摘要 本文总结了各种注意力,即插即用,方便大家将注意力加到自己的论文中。 SE import torch from torch import nn class SEAttention(nn.Module): """ SENet(Squeeze-and-Excitation Networks)中的注意力…

C++进阶(while循环——函数应用)

知识点代码框架总结 输入n组数据 ,对n组数据里面的每一组进行处理(输出、求和 、运算、其他) int n;//几组数据cin >> n;//2while(n--){//对每组数据进行处理}看到下面的样例,肌肉型反映出上面的框架//2// 1 2 3// 4 5 6若…

虚拟机:VMware功能,安装与使用

目录 一、虚拟机介绍 二、VMware 1.介绍 2.安装 (1)根据提示按步骤安装​编辑 (2)更改软件的安装地址​编辑 (3)根据自己的需求选择是否需要软件更新​编辑 (4)根据需求选择…

自动驾驶中的人机互相接管问题讨论

一、背景 人机接管(human takeover)是指在自动驾驶过程中,当系统遇到超出其处理能力或预设安全阈值的情况时,将控制权交还给驾驶员的过程。这一环节的设计直接关系到自动驾驶技术的实用性与安全性,是目前研究和实践中…

【SQL】MySQL事务的隔离级别和幻读、脏读和不可重复读

事务的隔离级别是数据库管理系统提供的一种功能,用于控制事务之间的相互影响程度。常见的隔离级别包括: 读未提交 (Read Uncommitted):允许一个事务读取另一个事务未提交的数据。 读已提交 (Read Committed):一个事务只能读取另一…

Python应用爬虫下载QQ音乐歌曲!

目录: 1.简介怎样实现下载QQ音乐的过程; 2.代码 1.下载QQ音乐的过程 首先我们先来到QQ音乐的官网: https://y.qq.com/,在搜索栏上输入一首歌曲的名称; 如我在上输入最美的期待,按回车来到这个画面 我们首…

[USACO24OPEN] Smaller Averages G (单调性优化dp)

来源 题目 Bessie 有两个长度为 N的数组(1≤N≤500)。第一个数组的第 i 个元素为 ai​(1≤ai​≤10^6),第二个数组的第 i个元素为bi​(1≤bi​≤10^6)。 Bessie 希望将两个数组均划分为若干非空…

机器学习(五) -- 监督学习(6) --逻辑回归

系列文章目录及链接 上篇:机器学习(五) -- 监督学习(5) -- 线性回归2 下篇:机器学习(五) -- 监督学习(7) --SVM1 前言 tips:标题前有“***”的内…

uniapp 支付宝小程序 芝麻免押 免押金

orderStr参数如下: my.tradePay({orderStr:res, // 完整的支付参数拼接成的字符串,从 alipay.fund.auth.order.app.freeze 接口获取success: (res) > {console.log(免押成功);console.log(JSON.stringify(res),不是JOSN);console.log(JSON.stringify…

使用机器学习 最近邻算法(Nearest Neighbors)进行点云分析 (scikit-learn Open3D numpy)

使用 NearestNeighbors 进行点云分析 在数据分析和机器学习领域,最近邻算法(Nearest Neighbors)是一种常用的非参数方法。它广泛应用于分类、回归和聚类分析等任务。下面将介绍如何使用 scikit-learn 库中的 NearestNeighbors 类来进行点云数…