文章目录
- [在线图书管理系统------Django + MySQL + Redis + Docker + Nginx 从零到上线](#在线图书管理系统——Django + MySQL + Redis + Docker + Nginx 从零到上线)
在线图书管理系统------Django + MySQL + Redis + Docker + Nginx 从零到上线
📖 文章简介: 第三板块的收官之作。综合前面九篇文章的全部知识点------环境管理、ORM 优化、请求链路、连接池、密钥管理、Docker 部署、日志规范------从零开发一个完整的在线图书管理系统。功能覆盖:借书/还书/库存管理/用户认证/借阅历史查询,后端 Django + DRF REST API,前端用模板渲染 + Bootstrap,数据库 MySQL 8.0,缓存 Redis,部署 Docker + Nginx。全文按步骤推动------从模型设计到 API 编写到前端页面到 docker-compose 部署,每个步骤配有完整的代码片段和解释。文末给出完整的项目 GitHub 链接,拿回去能直接跑起来。

🎬 个人主页: 源码骑士
❄ 专栏传送门: 《Android开发基础》《python基础课程》
⭐️热衷从源码视角拆解技术底层原理,将复杂架构讲得通俗易懂
🎬 源码骑士的简介:
5年Android Framework系统开发经验,曾主导多项系统级性能优化专项
技术栈覆盖Android系统全链路(Binder/Handler/AMS/WMS/启动流程)及Java后端全家桶(Spring + MyBatis + Redis + Oracle)
累计产出原创技术文章100+篇,文章以源码拆解为特色,被读者评价为"看一篇胜过啃一周文档"
导入语
第三板块收官------前面从环境管理、代码阅读、ORM 优化、请求链路、Docker 部署到日志规范,九篇文章把 Django 工程实战的方方面面全拆完了。这篇文章用一个完整的项目把全部知识串联起来------在线图书管理系统。麻雀虽小五脏俱全------用户认证、借书/还书、库存管理、API RESTful 接口、Docker 生产部署全都在。
1 ~> 项目架构一览
bash
图书管理系统
│
├─ 后端:Django 4.2 + Django REST Framework
├─ 数据库:MySQL 8.0(用户 + 图书 + 借阅记录)
├─ 缓存:Redis 7.0(热门图书列表缓存 + 会话缓存)
├─ 前端:Django Templates + Bootstrap 5
├─ 部署:Docker + docker-compose(4 容器)
│ ├─ web → Django + Gunicorn
│ ├─ db → MySQL
│ ├─ redis → Redis 缓存
│ └─ nginx → 反向代理 + 静态文件
└─ 环境:.env 管理密钥 + settings/production.py 生产配置
2 ~> 第一步:数据模型设计
python
from django.db import models
from django.contrib.auth.models import User
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=100)
isbn = models.CharField(max_length=13, unique=True)
total_copies = models.IntegerField(default=1) # 总库存
available_copies = models.IntegerField(default=1) # 可借数量
created_at = models.DateTimeField(auto_now_add=True)
class BorrowRecord(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="borrows")
book = models.ForeignKey(Book, on_delete=models.CASCADE, related_name="borrow_records")
borrowed_at = models.DateTimeField(auto_now_add=True)
returned_at = models.DateTimeField(null=True, blank=True)
is_returned = models.BooleanField(default=False)
3 ~> 第二步:REST API------借书核心逻辑
python
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticated
from django.db import transaction
@api_view(["POST"])
@permission_classes([IsAuthenticated])
def borrow_book(request, book_id):
with transaction.atomic(): # 确保库存更新和借阅记录的一致性
book = Book.objects.select_for_update().get(id=book_id) # 行锁,防止超借
if book.available_copies <= 0:
return Response({"error": "此书已全部借出"}, status=400)
# 减少库存
book.available_copies -= 1
book.save()
# 创建借阅记录
record = BorrowRecord.objects.create(user=request.user, book=book)
return Response({
"message": f"《{book.title}》借阅成功",
"record_id": record.id
})
4 ~> 第三步:前端页面------模板 + Bootstrap
html
<!-- templates/books/list.html -->
{% for book in books %}
<div class="card mb-3">
<div class="card-body">
<h5>{{ book.title }} <small class="text-muted">{{ book.author }}</small></h5>
<p>可借:{{ book.available_copies }} / 共 {{ book.total_copies }} 本</p>
{% if book.available_copies > 0 %}
<a href="{% url 'borrow' book.id %}" class="btn btn-primary">借阅</a>
{% else %}
<button class="btn btn-secondary" disabled>已借完</button>
{% endif %}
</div>
</div>
{% endfor %}
5 ~> 第四步:Docker 部署
docker-compose.yml(参考第 28 篇文章的完整版)------四容器编排,depends_on + healthcheck 控制启动顺序。
6 ~> 项目完整功能清单
| 功能 | 技术 | 关联文章 |
|---|---|---|
| 用户注册/登录 | Django Auth + Session | 24-请求全链路 |
| 图书 CRUD | Django ORM + select_related 优化 |
23-N+1 问题 |
| 借书/还书 | transaction.atomic + select_for_update |
25-连接池 |
| 热门图书缓存 | Redis | 26-密钥管理 |
| 日志记录 | RotatingFileHandler + JSON 格式 | 29-logging |
| Docker 部署 | 多阶段构建 + docker-compose | 27~28-Docker |
思考 && 总结
这个图书管理系统虽然小,但涵盖了 Django 工程实战的全部关键点------从 ORM 优化到 Docker 部署。把它作为你 Django 学习的起点是完美的------拿回去改改,用于你自己的业务。
结尾
第三板块"工程落地"十篇全部完结。感谢一路读来的各位!
源码骑士 --- 源码级拆解,从底层看透技术
👀 关注:跟博主一起从源码视角深耕底层原理
❤️ 点赞:让优质内容被更多人看见
⭐ 收藏:核心知识点存好,随用随查
💬 评论:分享你的经验或疑问,一起交流
🔄 一键四连:别忘了给博主一键四连!
🗡️ 寄语:从零到上线,不光要能跑------还要知道每一行怎么跑。
结语:Django 工程落地全部讲完。拿这个图书管理系统回去改,就是你自己的 Django 项目。一键四连!