30-在线图书管理系统-Django从零搭建到上线部署完整实战

文章目录

  • [在线图书管理系统------Django + MySQL + Redis + Docker + Nginx 从零到上线](#在线图书管理系统——Django + MySQL + Redis + Docker + Nginx 从零到上线)
    • 导入语
    • [1 ~> 项目架构一览](#1 ~> 项目架构一览)
    • [2 ~> 第一步:数据模型设计](#2 ~> 第一步:数据模型设计)
    • [3 ~> 第二步:REST API------借书核心逻辑](#3 ~> 第二步:REST API——借书核心逻辑)
    • [4 ~> 第三步:前端页面------模板 + Bootstrap](#4 ~> 第三步:前端页面——模板 + Bootstrap)
    • [5 ~> 第四步:Docker 部署](#5 ~> 第四步:Docker 部署)
    • [6 ~> 项目完整功能清单](#6 ~> 项目完整功能清单)
    • [思考 && 总结](#思考 && 总结)
    • 结尾

在线图书管理系统------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 项目。一键四连!

相关推荐
GEO优化小助手2 小时前
2026临沂GEO优化公司实测解析:3家本土机构适配性参考
大数据·人工智能·python
进阶的小名2 小时前
Spring Boot SSE + Nginx 配置:解决 EventSource 不实时返回、连接超时、流式响应被缓冲问题
spring boot·后端·nginx
砚底藏山河2 小时前
沪深A股:如何获取基金持股数据
java·python·数据分析·maven
goldenrolan3 小时前
学习型红外控制系统稳定性挂测工装专项总结
软件测试·python·stm32·嵌入式·红外
小小龙学IT3 小时前
Apache Airflow 2.x 深度指南:用 Python 编排一切的现代化工作流引擎
开发语言·python·apache
HappyAcmen3 小时前
7.faiss-cpu向量库安装
python·faiss
PinkSun3 小时前
Spring AI RAG踩坑:我骂了半年的FilterExpression,其实是背锅侠
后端·ai编程
你是个什么橙3 小时前
Python入门学习2:Python 基础语法全解析——从代码结构到输入输出
开发语言·python·学习
by————组态3 小时前
Ricon组态系统 - 新一代Web可视化组态平台
前端·后端·物联网·架构·组态·组态软件
小白学大数据3 小时前
Python + 大模型行业资讯自动化摘要流水线完整工程实现方案
开发语言·python·自动化