一、项目背景与痛点
校园图书馆、班级图书角、小型企业阅览室在日常图书管理工作中,传统的人工登记、Excel表格统计管理模式效率极低。随着图书数量和借阅人数的增多,各类管理问题愈发突出。
传统管理方式存在以下核心痛点:
- 人工登记效率低下,数据容易出错:手动登记借阅、归还信息流程繁琐,极易出现登记遗漏、信息写错、重复登记等人为失误。
- 图书库存状态不清晰:无法实时查看图书可借、已借出、遗失状态,图书库存、在馆数量统计混乱。
- 借阅逾期无人提醒、计费混乱:人工无法精准统计逾期天数,逾期罚款计算标准不统一,漏算错算情况频发。
- 读者借阅权限无管控:无法限制单人最大借阅数量、最长借阅时长,容易出现多人长期霸占图书不归还的情况。
- 无数据统计与可视化能力:无法直观统计热门借阅图书、月度借阅量、逾期订单占比,无法为图书采购提供数据支撑。
针对传统图书管理的各类痛点,本次基于 Python + Django 4.2 + MySQL + ECharts 搭建轻量化智能图书借阅管理系统,适配校园图书馆、小型阅览室场景,实现:
- 图书分类管理
- 读者信息录入
- 权限借阅限制
- 一键借阅归还
- 自动逾期计费
- 借阅记录留存
- 数据可视化统计
全套功能,补足专栏传统信息化管理系统全新细分赛道,和往期爬虫、网盘、聊天室、电商、监控类项目无任何功能与代码重合。
二、核心目标与定位
核心目标
搭建轻量化智能化图书管理平台,实现完整闭环:
- 管理员图书录入分类
- 读者信息注册建档
- 借阅权限规则配置
- 用户在线借阅图书
- 系统自动记录借阅时长
- 到期逾期自动判罚
- 图书归还核销
- 借阅日志永久留存
- 借阅数据可视化统计分析
彻底替代人工表格登记模式,实现图书管理数字化、标准化、智能化。
项目定位
- 轻量化校园图书信息化管理系统:采用 Django 原生 MVT 架构,无需前后端分离,部署简单、操作便捷。
- 双权限体系:区分管理员、普通读者双权限体系,管理员全权负责图书、用户、规则管理,读者仅可查询、借阅、归还图书。
- 适配场景:中小学、高校班级图书角、小型阅览室等轻量化使用场景,主打零门槛部署、全自动管理、数据精准可追溯。
核心设计理念
- 权限分级管控
- 借阅流程简化
- 数据自动统计
- 逾期智能计费
- 日志全程留存
解决传统图书管理低效、混乱、易错的核心问题。
三、整体技术方案
项目基于 Django 原生 MVT 分层架构开发,MySQL 存储图书、读者、借阅、分类全量业务数据,后端封装借阅规则与逾期计算逻辑,前端依托 ECharts 实现借阅数据可视化统计。
整体分层架构流程图
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 读者前台操作层 │────▶│ 路由视图分发层 │────▶│ 借阅规则逻辑层 │────▶│ 数据校验拦截层 │
│ 图书查询/借阅申请/归还操作/个人记录查看 │ │ 分发页面与业务请求、参数校验 │ │ 校验借阅数量、借阅时长、逾期状态 │ │ 拦截超限、逾期未缴费违规借阅请求 │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 图书数据管理层 │────▶│ 逾期自动计费层 │────▶│ 数据可视化统计层 │
│ 图书新增/分类/库存/状态管理 │ │ 自动计算逾期天数与罚款金额 │ │ 借阅量、热门图书、逾期率图表展示 │
└─────────────┘ └─────────────┘ └─────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ 底层技术底座 │
│ - 后端框架:Python3.11 + Django4.2 原生MVT架构,快速开发管理系统业务 │
│ - 数据存储:MySQL8.0 存储图书、分类、读者、借阅记录、逾期账单数据 │
│ - 可视化图表:ECharts 实现借阅数据柱状图、饼图、趋势图统计展示 │
│ - 规则引擎:后端封装借阅限额、时长限制、逾期梯度计费规则 │
│ - 日志系统:全程记录所有借阅、归还、缴费、违规操作日志 │
│ - 权限体系:双角色权限隔离,管理员与读者操作权限严格区分 │
│ - 安全校验:表单CSRF防护、重复借阅拦截、数据合法性校验 │
└─────────────────────────────────────────────────────────────────────────┘
完整技术栈清单
- Web后端:Python 3.11、Django 4.2,原生 MVT 开发模式
- 数据库:MySQL 8.0,存储全部图书管理业务数据
- 数据可视化:ECharts,实现借阅数据多维度统计图表
- 权限管控:自定义角色权限,区分管理员、普通读者
- 规则计算:Python 原生算法实现逾期天数、罚款金额自动计算
- 日志记录:全局操作日志留存,所有业务操作可追溯
- 后台管理:Django Admin 二次开发,适配图书专属管理场景
四、核心能力模块详解
1. 图书分类与库存管理模块
实现图书标准化录入与分类管理,实时监控图书库存状态,杜绝数据混乱:
- 多级图书分类:支持文学、科技、教育、历史、艺术等自定义分类,可自由新增、编辑、删除分类。
- 完整图书信息录入:包含图书名称、作者、出版社、出版时间、图书 ISBN、总数量、可借数量、图书简介、封面图。
- 库存状态自动更新:图书借阅、归还后系统自动增减可借数量,实时同步库存状态。
- 图书状态管控:区分在馆可借、已借出、遗失、下架四种状态,管理员可手动修正图书状态。
2. 读者信息与权限管控模块
规范化管理读者信息,配置借阅权限规则,杜绝恶意霸书、超额借阅行为:
- 读者信息建档:支持批量录入、单个新增读者信息,包含姓名、学号/工号、班级、联系方式。
- 借阅权限配置:管理员可自定义单人最大可借图书数量、最长借阅天数。
- 违规权限冻结:存在逾期未缴费、恶意不归还图书的读者,自动冻结借阅权限。
- 个人中心查询:读者可随时查看个人已借图书、逾期账单、借阅历史记录。
3. 图书借阅与归还核心模块
极简借阅流程,全自动登记核销,替代人工表格记录,提升管理效率:
- 一键借阅登记:读者选择空闲图书即可一键借阅,系统自动生成唯一借阅单号。
- 借阅规则校验:自动校验读者是否超额借阅、是否权限冻结、图书是否可借。
- 一键归还核销:图书归还后自动核销借阅记录,恢复图书可借库存。
- 借阅记录留存:每一条借阅、归还记录永久入库,支持条件检索与导出。
4. 逾期自动判断与计费模块(核心亮点)
精准核算逾期时长与罚款,解决人工计费误差、漏算难题,规则透明可追溯:
- 自动到期判断:系统根据借阅时间 + 规定借阅天数,自动判定图书是否逾期。
- 梯度逾期计费:自定义每日罚款金额,自动计算逾期总天数与总罚款。
- 逾期状态锁定:逾期未缴费读者自动锁定借阅权限,缴费后方可恢复。
- 账单明细查询:每笔逾期账单清晰展示逾期天数、单日费用、总金额、缴费状态。
5. 图书检索与热门推荐模块
便捷化图书查询,助力读者快速找书,同时为管理员提供热门图书数据:
- 多条件检索:支持图书名称、作者、ISBN、分类模糊搜索。
- 状态筛选:可筛选可借图书、已借出图书、逾期关联图书。
- 热门图书排序:根据借阅次数自动排序,展示高频热门借阅图书。
- 图书详情展示:点击图书可查看完整简介、库存、借阅历史、评分信息。
6. 借阅数据可视化统计模块
数据化展示图书借阅情况,为图书采购、规则调整提供直观数据支撑:
- 月度借阅趋势图:展示近 12 个月图书借阅总量变化趋势。
- 分类借阅占比饼图:统计不同分类图书的借阅占比,判断热门图书品类。
- 逾期订单统计:统计总逾期订单数、逾期率、未缴费账单总数。
- 数据看板汇总:首页展示图书总数、在馆数量、累计借阅人次、当前逾期数量。
五、创新价值与亮点
- 全自动化借阅管理,告别人工登记:从借阅登记、到期判断、逾期计费、库存更新全程自动化,大幅降低图书管理员工作成本。
- 精细化权限与规则管控:自定义借阅限额、借阅时长、逾期费用,适配不同场景的图书管理规则。
- 精准逾期计费体系:依托时间算法自动核算逾期费用,零误差、无遗漏,规则公开透明。
- 数据可视化数据分析:将零散借阅数据转化为可视化图表,实现管理从人工经验到数据驱动升级。
- 轻量化易部署、适配场景广:原生 Django 开发无复杂依赖,适配校园、班级、小型阅览室多场景使用。
六、应用前景与落地场景
- 校园图书馆管理系统:中小学、高校小型图书馆部署使用,替代传统 Excel 人工管理模式。
- 班级图书角管理工具:适配班级公益图书角,便捷管理学生借阅、归还、逾期情况。
- 企业内部阅览室管理:企业图书室、资料室图书归档与员工借阅管理。
- Django 传统管理系统标杆项目:标准 CRUD 业务 + 算法计算 + 数据可视化,是课程设计、毕业设计高频优质选题,区别于烂大街商城项目。
七、完整代码结构示例
1. 项目整体目录结构
django-book-manage-system/
├── manage.py
├── book_project/ # 项目全局配置目录
│ ├── settings.py # 数据库、静态资源、权限中间件配置
│ ├── urls.py # 前台读者、后台管理员路由分发
│ └── middleware.py # 权限拦截、登录校验中间件
├── apps/ # 模块化业务应用拆分
│ ├── user_role/ # 管理员、读者用户注册登录、权限管控模块
│ ├── book_category/ # 图书分类新增、编辑、删除管理模块
│ ├── book_info/ # 图书信息录入、库存状态、图书检索模块
│ ├── borrow_return/ # 图书借阅、归还、记录留存核心模块
│ ├── overdue_fee/ # 逾期计算、账单生成、费用缴纳模块
│ └── data_statistics/ # 借阅数据统计、ECharts图表封装模块
├── core/ # 公共工具类文件夹
│ ├── time_calc.py # 借阅时长、逾期天数计算工具
│ ├── fee_calc.py # 逾期罚款金额统一计算工具
│ ├── rule_check.py # 借阅权限、超额规则校验工具
│ └── chart_data.py # 可视化图表数据封装工具
├── static/ # 页面样式、图标、ECharts静态资源
├── templates/ # 前台查询页面、后台管理页面模板
├── media/book_img/ # 图书封面图片存储目录
├── requirements.txt # 项目全套依赖包
└── readme.md # 项目部署启动文档
2. 核心可运行代码片段
示例1:图书、借阅记录核心数据模型(apps/book_info/models.py)
python
from django.db import models
from apps.user_role.models import ReaderUser
from apps.book_category.models import BookCategory
# 图书状态枚举
BOOK_STATUS = (
("normal", "在馆可借"),
("borrowed", "已借出"),
("lose", "图书遗失"),
("off", "下架停用"),
)
class BookInfo(models.Model):
"""图书信息核心模型"""
book_name = models.CharField(max_length=100, verbose_name="图书名称")
book_author = models.CharField(max_length=80, verbose_name="作者")
book_publisher = models.CharField(max_length=80, verbose_name="出版社")
book_isbn = models.CharField(max_length=30, unique=True, verbose_name="ISBN编号")
book_pub_time = models.DateField(verbose_name="出版时间")
book_desc = models.TextField(verbose_name="图书简介")
book_cover = models.ImageField(upload_to="book_img/", verbose_name="图书封面")
total_num = models.IntegerField(default=1, verbose_name="图书总数量")
borrow_num = models.IntegerField(default=1, verbose_name="可借数量")
book_category = models.ForeignKey(BookCategory, on_delete=models.CASCADE, verbose_name="所属分类")
book_status = models.CharField(max_length=15, choices=BOOK_STATUS, default="normal", verbose_name="图书状态")
borrow_count = models.IntegerField(default=0, verbose_name="累计借阅次数")
create_time = models.DateTimeField(auto_now_add=True, verbose_name="录入时间")
class Meta:
verbose_name = "图书信息"
verbose_name_plural = verbose_name
def __str__(self):
return self.book_name
示例2:逾期时间与费用核心计算工具类(core/fee_calc.py)
python
from datetime import datetime, timedelta
from django.conf import settings
class OverdueFeeCalc:
"""图书逾期时间、费用统一计算工具类"""
# 从配置文件读取规则:最大借阅天数、每日逾期罚款
MAX_BORROW_DAY = settings.MAX_BORROW_DAY
DAY_FEE = settings.OVERDUE_DAY_FEE
@classmethod
def get_overdue_days(cls, borrow_time):
"""
计算图书逾期天数
:param borrow_time: 借阅时间
:return: 逾期天数、是否逾期
"""
now_time = datetime.now()
# 计算应归还时间
return_deadline = borrow_time + timedelta(days=cls.MAX_BORROW_DAY)
if now_time <= return_deadline:
return 0, False
# 计算逾期总天数
overdue_days = (now_time - return_deadline).days
return overdue_days, True
@classmethod
def get_overdue_fee(cls, borrow_time):
"""计算逾期总罚款金额"""
overdue_days, is_overdue = cls.get_overdue_days(borrow_time)
if not is_overdue:
return 0.00
total_fee = overdue_days * cls.DAY_FEE
return round(total_fee, 2)
示例3:图书借阅核心业务逻辑视图(apps/borrow_return/views.py)
python
from django.shortcuts import render, redirect
from django.contrib import messages
from django.views import View
from datetime import datetime
from apps.book_info.models import BookInfo
from apps.borrow_return.models import BorrowRecord
from apps.user_role.models import ReaderUser
from core.rule_check import check_reader_borrow_limit
class BookBorrowView(View):
"""图书借阅核心视图"""
def get(self, request):
book_id = request.GET.get("book_id")
book = BookInfo.objects.filter(id=book_id, book_status="normal", borrow_num__gt=0).first()
if not book:
messages.error(request, "图书不存在或暂时无法借阅!")
return redirect("book_list")
return render(request, "borrow_confirm.html", {"book": book})
def post(self, request):
book_id = request.POST.get("book_id")
reader = request.user.readeruser
book = BookInfo.objects.filter(id=book_id).first()
# 1. 校验读者借阅限额
if not check_reader_borrow_limit(reader):
messages.error(request, "您已达到最大借阅数量,请归还后再借阅!")
return redirect("book_detail", book_id=book_id)
# 2. 校验图书状态
if book.borrow_num <= 0 or book.book_status != "normal":
messages.error(request, "图书库存不足,暂时无法借阅!")
return redirect("book_detail", book_id=book_id)
# 3. 创建借阅记录
BorrowRecord.objects.create(
reader=reader,
book=book,
borrow_time=datetime.now()
)
# 4. 更新图书库存与借阅次数
book.borrow_num -= 1
book.borrow_count += 1
book.book_status = "borrowed" if book.borrow_num == 0 else "normal"
book.save()
messages.success(request, "图书借阅成功!请按时归还,避免逾期扣费")
return redirect("my_borrow")
八、总结与展望
本篇博客聚焦传统信息化管理系统 赛道,全新实现Python+Django智能图书管理系统,区别于专栏以往的爬虫、长连接通讯、文件存储、电商交易类项目,主打业务规则计算+数据统计可视化 核心能力,是典型的高校课程设计、毕业设计优质项目。
项目完整覆盖图书分类管理、读者权限管控、全自动借阅归还、逾期智能计费、数据可视化统计、全程日志追溯等核心功能,代码结构清晰、业务逻辑贴合真实校园场景,无冗余复杂功能,上手部署简单,同时包含时间算法计算、权限规则校验、图表数据封装等加分技术点,简历辨识度极高。
后续迭代规划
- 新增图书预约功能,热门无库存图书支持预约排队,图书归还后自动提醒;
- 接入邮件提醒服务,图书到期前自动发送归还提醒邮件,减少逾期订单;
- 新增图书评价评分功能,读者可对借阅图书进行评价打分;
- 批量导入导出功能,支持Excel批量导入图书、读者数据,批量导出借阅记录。