图书馆管理系统-前后端分离-React+Django+MySQL

1 阅读6分钟

前后端分离-图书馆管理系统 React+Django+MySQL

项目概况

这个系统以实体图书馆的日常运营为核心场景,解决图书编目、借还书操作、读者管理、逾期追缴、预约服务等完整业务流程,同时通过数据统计分析辅助馆藏优化决策。

  • 技术架构:前后端分离(Next.js 14 + Django REST Framework)
  • 数据库:MySQL 8.0

网盘资源链接如下,后续随缘更新,

百度网盘链接:pan.baidu.com/s/1UnjtdteN… 提取码:scx2

我用夸克网盘给你分享了「Librarian图书馆管理系统 Django+React」,点击链接或复制整段内容,打开「夸克APP」即可获取。

/1b933LFTTQ:/

链接:pan.quark.cn/s/d37e8f25c…


技术选型与理由

前端

技术选型理由
Next.js 14 + App Router服务端渲染 + 文件路由,SEO 友好,开发体验佳
TypeScript类型安全,减少运行时错误
Zustand轻量状态管理,相比 Redux 减少大量模板代码
@tanstack/react-query服务端状态缓存与同步,自动处理加载/错误状态
Tailwind CSS实用优先,配合自定义色板快速构建一致 UI
Recharts基于 React 的图表库,灵活且文档完善
Framer Motion页面过渡与微交互动画

后端

技术选型理由
Django 5 + DRF成熟稳重的 Python Web 框架,ORM 强大,生态完善
djangorestframework-simplejwtJWT 认证,前后端分离的标准方案
django-filter声明式查询过滤,减少重复代码
MySQL 8.0关系型数据库,事务支持好,适合图书馆场景

在这里插入图片描述

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

系统架构

整体结构

Library Management System/
├── library-backend/        # Django 后端
│   ├── library/            # 主应用
│   │   ├── authentication/ # 认证模块
│   │   ├── books/          # 图书模块
│   │   ├── loans/          # 借阅模块
│   │   ├── members/        # 会员模块
│   │   ├── fines/          # 罚款模块
│   │   ├── reservations/   # 预约模块
│   │   ├── stats/          # 统计模块
│   │   └── activity_logs/  # 活动日志模块
│   ├── scripts/            # 辅助脚本
│   └── manage.py
│
├── library-frontend/       # Next.js 前端
│   ├── src/
│   │   ├── app/            # App Router 路由页面
│   │   ├── components/     # 组件库
│   │   ├── hooks/          # 自定义 Hooks
│   │   ├── lib/            # 工具函数 + API 封装
│   │   ├── store/          # Zustand 状态管理
│   │   ├── styles/         # 全局样式
│   │   └── types/          # TypeScript 类型
│   └── package.json
│
├── docs/                   # 详细文档
└── init.sql                # 数据库初始化

前端架构

前端采用 Next.js 14 App Router,目录结构按功能模块划分:

  • app/dashboard/books/ — 图书管理页面
  • app/dashboard/loans/ — 借阅管理页面
  • app/dashboard/members/ — 会员管理页面
  • app/dashboard/stats/ — 统计分析页面

每个页面内部使用 React Query 管理数据获取,组件按领域拆分为独立的目录,UI 基础组件则集中在 components/ui/ 中。

路由守卫通过 middleware.ts 实现,未认证用户自动跳转登录页。

后端架构

后端严格遵循 Django 模块化设计,每个业务领域为一个独立的 Django App:

library/
├── authentication/   # 用户注册/登录/角色管理
├── books/            # 图书 CRUD + 分类管理
├── loans/            # 借书/还书/续借/逾期处理
├── members/          # 读者管理 + 借书证系统
├── fines/            # 罚款计算与缴纳
├── reservations/     # 预约 + 过期自动处理
├── stats/            # 各类统计视图
└── activity_logs/    # 操作审计日志

每个模块包含 models.py(数据模型)、serializers.py(序列化)、views.py(视图逻辑)、urls.py(路由注册),职责清晰。


数据模型设计

系统共有 9 个核心数据模型,以下是核心实体关系:

User (Django用户) ── 1:1 ── Profile (扩展信息)
  │
  └── Member (会员/读者) ── 1:N ── Loan (借阅记录)
  │                                  │
  │                                  └── Fine (罚款记录)
  │
  ├── Book (图书) ── N:1 ── Category (分类)
  │
  └── Reservation (预约)

图书模型关键字段

class Book(models.Model):
    title = models.CharField(max_length=200)          # 书名
    author = models.CharField(max_length=100)          # 作者
    isbn = models.CharField(max_length=13, unique=True) # ISBN
    category = models.ForeignKey(Category)              # 分类
    total_copies = models.IntegerField(default=1)       # 总馆藏
    available_copies = models.IntegerField(default=1)   # 可借数量
    status = models.CharField(...)                      # 在馆/借出/维护/丢失

借阅模型关键逻辑

class Loan(models.Model):
    book = models.ForeignKey(Book)
    member = models.ForeignKey(Member)
    borrowed_date = models.DateField(auto_now_add=True)
    due_date = models.DateField()           # 到期日
    returned_date = models.DateField(null=True)  # 实际归还日
    renewal_count = models.IntegerField(default=0)  # 续借次数(上限2次)

借书时自动扣减 available_copies,还书时加回;逾期自动计算罚款。


核心功能实现

1. 认证与权限体系

系统内置三种角色:

  • ADMIN(管理员)— 全部权限
  • LIBRARIAN(图书管理员)— 图书/借阅/会员管理
  • MEMBER(会员)— 浏览图书、个人借阅与预约

前端通过 Zustand 管理认证状态,结合 cookie 持久化。API 请求通过 Axios 拦截器自动附加 JWT Token。

2. 借阅流程

借书: 会员选择图书 → 检查可借数量 → 创建借阅记录 → 扣减库存
还书: 扫描图书 → 更新归还日期 → 增加库存 → 检查逾期并计算罚款
续借: 检查续借次数(≤2) → 检查有无预约 → 延长到期日

3. 预约管理

当图书被全部借出时,会员可以发起预约。系统提供两个管理命令:

  • process_expired_reservations — 自动处理过期预约
  • send_reservation_reminders — 发送预约到馆提醒

可通过 crontab 定时执行。

4. 统计与分析

使用 Recharts 实现可视化,支持:

  • 月度借阅趋势(折线图)
  • 热门图书排行(柱状图)
  • 分类分布(环形图)
  • 系统概览(核心指标卡片)

UI/UX 设计

项目的视觉设计遵循精心定义的规范:

暖色调色板

--bg-paper: #F7F5F0;    /* 纸色背景 */
--brand-green: #3A5A40; /* 墨绿主色 */
--brand-clay: #BC4749;  /* 陶土红强调 */
--brand-sand: #D4C5A9;  /* 沙色点缀 */

设计原则:

  • 没有纯平色背景 — 全局覆盖 SVG 噪点纹理,增强纸张质感
  • 禁蓝紫色系 — 统一使用暖色调,营造图书馆的温馨氛围
  • 字体搭配 — 英文使用 Manrope / Cinzel,中文使用 Noto Serif SC
  • 圆角系统 — sm(4px), md(8px), lg(12px), xl(16px)

页面过渡

使用 Framer Motion 实现路由切换时的淡入淡出动画,提升浏览连贯性。


部署与运维

系统提供完整的部署方案:

  • 后端:Gunicorn + Nginx + Supervisor 生产部署
  • 前端:Next.js 构建产出部署至 Vercel / Nginx
  • 数据库:MySQL 主从备份方案
  • 日志:结构化日志 + 按日轮转
  • 监控:故障排查清单覆盖常见问题

经验与反思

做得好的地方

  1. 模块拆分清晰 — 后端每个业务独立 App,前端按领域划分组件,维护成本低
  2. 文档先行 — 项目初期就建立了完整的 docs/ 目录,API 文档、数据库设计、部署指南一应俱全
  3. 设计一致性 — 从颜色到字体到间距,建立了完整的设计体系,避免碎片化风格
  4. 状态管理轻量化 — Zustand + React Query 的组合相比 Redux 大幅减少了样板代码

可以改进的地方

  1. 测试覆盖不足 — 目前缺少端到端测试,核心流程(借书→还书→罚款)应有 E2E 覆盖
  2. 搜索能力可增强 — 目前图书搜索基于数据库 LIKE 查询,引入 Elasticsearch 会显著提升体验
  3. 国际化 — 系统目前仅支持中文,后续可加入 i18n
  4. 消息通知 — 预约到馆提醒目前依赖定时命令,WebSocket 实时推送会更及时

快速体验

# 1. 后端
cd library-backend
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
# 配置 .env 数据库连接
python manage.py migrate
python manage.py runserver

# 2. 前端
cd library-frontend
pnpm install
# 配置 .env.local
pnpm dev

# 访问 http://localhost:3000

结语

构建一个完整的图书馆管理系统是一次非常有价值的全栈实践。从数据库建模到 API 设计,从组件架构到视觉体系,每个环节都需要仔细权衡。

这个项目目前仍在持续迭代中,如果你有任何建议或想法,欢迎交流探讨。


项目文档目录:docs/ 包含 11 份详细文档,覆盖 API、数据库、部署、测试等全部环节。

期待后续优化,可以转存网盘链接,关注资源更新