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 前端部分页面展示

书籍列表页面:

图片

借阅人列表页面:

图片

添加书籍:

图片

添加借阅人:

图片

借书:

图片

借书记录:

图片

图片

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

最新Wireshark查看包中gzip内容

虽然是很简单的事情,但是网上查到的查看gzip内容的方法基本都是保存成zip文件,然后进行二进制处理。 其实现在最新版本的Wireshark已经支持获取gzip内容了。 选中HTTP协议,右键选择[追踪流]->[HTTP Stream] 在弹出窗口中,已…

mavsdk_server安卓平台编译

1.下载好mavsdk并进入mavsdk目录 2.生成docker安卓平台文件 docker run --rm dockcross/android-arm64 >./dockcross-android-arm64 3.生成makefile ./dockcross-android-arm64 cmake -DCMAKE_BUILD_TYPERelease -DBUILD_MAVSDK_SERVERON -DBUILD_SHARED_LIBSOFF -Bbuild/…

专业条码二维码扫描设备和手机二维码扫描软件的区别?

条码二维码技术已广泛应用于我们的日常生活中,从超市结账到公交出行,再到各类活动的入场验证,条码二维码的便捷性不言而喻,而在条码二维码的扫描识别读取过程中,专业扫描读取设备和手机二维码扫描软件成为了两大主要工…

【计算机毕业设计】003基于weixin小程序教学辅助

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

【Java】字符与字符串

1.字符char 字符数据类型用于表示单个字符。 字符数据类型char用于表示单个字符。字符型字面值用单引号括住。 char a A; char b 4; char c \u041; // A的Unicode字符串字面值必须括在双引号中。而字符字面值是括在单引号中的单个字符。因此"A"是一个字符串&…

视频号里的视频怎么下载保存?推荐5种方法!

很多人不知道视频号里的视频怎么下载保存,其实视频号下载提取方式比较多常见的有缓存、查看源代码、抓包、录屏、自动提取工具。 1:缓存 安卓手机特性将需要的视频观看完并缓存到手机,并将视频另外存为mp4文件,不过该方式最安卓1…

【扩散模型】【图像生成】FreeU:扩散 U-Net 模型的免费午餐(CVPR 2024 Oral))

论文名称:FreeU: Free Lunch in Diffusion U-Net (CVPR 2024 Oral) 论文地址:https//arxiv.org/pdf/2309.11497 项目链接:https//chenyangsi.top/FreeU/ 文章目录 摘要一、 扩散 U-Net 中的低频和高频分量二、扩散 U-Net 是如何执行去噪过程…

excel、word、ppt 下载安装步骤整理

请按照我的步骤开始操作,注意以下截图红框标记处(往往都是需要点击的地方) 第一步:下载 首先进入office下载网址: otp.landian.vip 然后点击下载 拉到下方 下载站点(这里根据自己的需要选择下载&#x…

VLM技术介绍

1、背景 视觉语言模型(Visual Language Models)是可以同时从图像和文本中学习以处理许多任务的模型,从视觉问答到图像字幕。 视觉识别(如图像分类、物体保护和语义分割)是计算机视觉研究中一个长期存在的难题&#xff…

Excel第31享:基于left函数的截取式数据裂变

1、需求描述 如下图所示,在“Excel第30享”中统计2022年YTD各个人员的“上班工时(a2)”,需要基于工时明细表里的“日期”字段建立辅助列,生成“年份”字段,本文说明“年份”字段是怎么裂变而来的。 下图为…

前端web性能统计

前端web性能统计 1. 背景2. 业界方案2.1 腾讯2.2 蚂蚁金服2.3 字节跳动2.4 美团 3. 相关观念3.1 RAIL模型3.2 性能指标3.3 真实用户监控3.4 performance 4. 性能监控工具介绍5. 推荐采用方案 1. 背景 在如今的数字时代,网站和应用程序的性能对用户体验至关重要。用…

13_Shell系统函数

13_Shell系统函数和自定义函数 一、系统函数 basename 获取文件名 #!/bin/bash#basename 相对路径文件名 basename ./1.sh#basename 绝对路径文件名 basename /tmp/1.sh#basename 去除文件后缀名 basename /tmp/1.sh .shdirname 获取文件所在目录名 #!/bin/bash#dirname 相对路…

【web】-sql注入-login

根据网址提示打开如图: 查看源代码前台并没有过滤限制、扫描后台也没有发现特殊文件。看到标题显示flag is in database,尝试sql注入。 由于post,bp抓包如下: 运行python sqlmap.py -r 1.txt --dump 获取flag 42f4ebc342b6ed4af4aadc1ea75f…

在word中删除endnote参考文献之间的空行

如图,在References中,每个文献之间都有空行。不建议手动删除。打开Endnote。 打开style manager 删除layout中的换行符。保存,在word中更新参考文献即可。

【自学网络安全】二、防火墙NAT智能选路综合实验

任务要求: (衔接上一个实验所以从第七点开始,但与上一个实验关系不大) 7,办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP不能用来转换) 8,分公司设备可以通过总…

中小学校园EasyCVR视频综合监管方案:构建安全、智能的校园环境

一、背景需求分析 随着科技的快速发展,校园安全问题日益受到社会各界的关注。尤其是在中小学校园中,学生的安全更是牵动着每一个家庭的心。为了更有效地保障学生的安全,提高校园安全管理水平,视频监控系统在中小学中的应用越来越…

TikTok 入局小游戏,小游戏出海赛道大热,开发者如何抢滩海外市场?

国内小游戏市场的竞争日益激烈,开发成本上涨、买量的投入成本飙升,对小团队和个人开发者的资金要求量高。除此以外,单款游戏从软著、备案、到认证所需要的时间和费用都大幅提升,也对小游戏市场造成重大影响。重压之下,…

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

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

算法day04 位运算 插入排序 二分法 对数器

位运算: 1)有一个数组只包含这样的数,有几个数出现偶数次,有1个数出现奇数次,要求时间复杂度不超过o(n),怎么求出现奇数次的数。 使用 ^ 异或运算整个数组,偶数次运算结果为0,只留下最后一个奇数次的数。 …

java配置nginx网络安全,防止国外ip访问,自动添加黑名单,需手动重新加载nginx

通过访问日志自动添加国外ip黑名单 创建一个类,自己添加一个main启动类即可测试 import lombok.AccessLevel; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.json.JSONArray; import org.json.JSONObject; import org.sp…