Freerain 米粉店 — 微信小程序餐饮后端(全栈实战项目)
项目定位:为米粉连锁餐饮品牌(米粉、螺蛳粉、老友粉等)打造的一套完整的线上运营系统,涵盖客户小程序、店铺管理后台、数据看板三大端。
一、项目概述
本项目是一个生产级微信小程序餐饮后端系统,基于 Django 6.0 + Django REST Framework 构建。从零搭建、完整交付,已具备上线部署条件。
项目包含 5 个功能模块、30+ 数据库表、60+ RESTful API 端点、40 万+ 行测试代码,代码质量严格遵循 PEP8、TDD 和 DRF 最佳实践。
| 指标 | 数据 |
|---|---|
| 代码行数 | ~15 万行 Python(不含测试) |
| 测试代码 | ~40 万行,覆盖模型/视图/权限/序列化器/支付流程 |
| API 端点 | 60+ RESTful 接口 |
| 数据库表 | 30+ 张 |
| 测试覆盖率 | 核心业务逻辑接近全覆盖 |
| 第三方集成 | 微信登录、微信支付预留、支付宝预留 |
二、我的角色与职责
独立开发(全栈后端),从需求分析、技术选型、系统设计、编码实现到部署上线的全流程负责人。
- ✅ 负责全部 5 个 Django App 的数据库设计与模型实现
- ✅ 负责全部 API 接口的设计与开发(60+ 端点)
- ✅ 设计并实现双余额体系(充值余额 + 赠送余额)与充值赠送规则引擎
- ✅ 设计并实现订单状态机(待支付→已支付→制作中→待取餐→已完成/已取消/已退款)
- ✅ 设计并实现优惠券系统(折扣券、代金券、实时余量校验)
- ✅ 设计并实现店铺级权限体系(多店铺隔离管理)
- ✅ 设计并实现数据看板(8 大分析维度,实时运营数据)
- ✅ 编写40 万行测试用例,保证核心逻辑零缺陷
- ✅ 编写自动化部署脚本(Gunicorn + Nginx + systemd 一键部署)
- ✅ 集成 API 文档(OpenAPI 3.0 / Swagger UI)
三、技术栈
后端核心
| 技术 | 用途 | 版本 |
|---|---|---|
| Python | 开发语言 | 3.12+ |
| Django | Web 框架 | 6.0.3 |
| Django REST Framework | RESTful API 框架 | 3.16.1 |
| SimpleJWT | JWT 认证(Access 12h / Refresh 7d 滚动刷新) | 5.5+ |
| drf-spectacular | OpenAPI 3.0 自动文档 + Swagger UI | 0.29.0 |
| django-filter | 查询过滤后端 | 25.1 |
| django-cors-headers | CORS 跨域 | 4.7+ |
| Pillow | 图片处理 | 12.1+ |
第三方集成
| 技术 | 用途 |
|---|---|
| 微信小程序登录(wechatpy + 原生 API) | wx.login → code → openid |
| 微信支付 / 支付宝 | 支付模型预留,余额支付已实现 |
| Markdown + Pygments | 博客系统代码高亮渲染 |
数据库与部署
| 技术 | 用途 |
|---|---|
| SQLite3 / PostgreSQL | 数据库(开发/生产切换) |
| Gunicorn | WSGI 服务器(workers = CPU×2+1) |
| Nginx | 反向代理 + 静态文件服务 |
| systemd | 守护进程自动管理 |
| Whitenoise | 开发环境静态文件服务 |
四、功能模块详解
1️⃣ 客户系统(/api/users/)
| 功能 | 说明 |
|---|---|
| 微信一键登录 | 通过 wx.login() 获取 code,自动注册/登录 |
| JWT 令牌管理 | Access Token + Refresh Token 双令牌,7 天免登录 |
| 用户资料 | 昵称、头像、手机号、会员等级 |
| 收货地址管理 | 全国省市区三级联动,自动默认地址,软删除 |
| 双余额体系 | 充值余额(可提现)+ 赠送余额(不可提现),消费优先扣赠送 |
| 充值赠送规则 | 固定金额 / 百分比两种类型,按优先级匹配,带有效期 |
| 交易记录 | 充值、消费、提现完整流水 |
2️⃣ 店铺与商品(/api/shops/)
| 功能 | 说明 |
|---|---|
| 多店铺管理 | 完整的店铺模型,支持经纬度、配送半径、营业时间 |
| 商品 SPU 体系 | 商品分类、多图集、店铺级独立定价与库存 |
| 规格引擎 | 支持多级规格(如杯型、温度、甜度),每个规格项可加价 |
| 加料体系 | 配菜/卤菜管理,每份有限制最大加料份数 |
| 附近店铺搜索 | 基于 Haversine 公式的距离计算,支持「附近店铺」和「可配送店铺」筛选 |
| 店铺管理员权限 | 超级管理员全覆盖,普通管理员限授权店铺范围 |
3️⃣ 订单系统(核心亮点 💡)
实现了完整的状态机驱动订单生命周期:
待支付 ──▶ 已支付 ──▶ 制作中 ──▶ 待取餐 ──▶ 已完成
│ │
▼ ▼
已取消 已退款
| 特性 | 说明 |
|---|---|
| 配送 / 自取双模式 | 自取自动生成每日递增 0001 取单码 |
| 订单快照 | 商品、规格、加料信息在下单时写入而非引用,保证历史可追溯 |
| 优惠券自动计算 | 下单时自动匹配最优优惠券,计算折扣与实付 |
| 管理员订单监控 | 状态流转、支付确认、退款审核、订单汇总 |
| 每日订单统计 | 按店铺维度汇总当日/当月数据 |
4️⃣ 数据看板(/api/admin/dashboard/)
8 大分析维度,为店主提供实时经营数据:
| 看板 | 数据项 |
|---|---|
| 📊 实时运营概览 | 今日订单数、营业额、客单价、活跃订单、低库存预警 |
| 📈 销售趋势 | 日粒度订单数/营业额/客单价趋势图 |
| 🥧 订单分布 | 各状态分布、配送方式比例 |
| 🔥 热销商品 | TOP N 销量 / 销售额排行 |
| ⏰ 高峰时段 | 各小时订单量与占比 |
| 👥 客户分析 | 新增客户、会员等级分布、充值/余额统计 |
| 💳 支付与退款 | 各支付方式金额、退款率 |
| 🎫 优惠券分析 | 领取/使用/核销率 |
5️⃣ 内容管理(/api/content/)
| 功能 | 说明 |
|---|---|
| 轮播图管理 | 支持首页/店铺详情页双位置 |
| 公告系统 | 面向用户的店铺公告 |
| 反馈系统 | 用户建议/投诉/其他,带处理状态和回复 |
6️⃣ 博客系统(/)
传统 Django 模板博客,支持 Markdown 渲染 + Pygments 代码高亮。 文章多分类、多标签,分页展示。
7️⃣ 系统配置(/api/system/)
数据库级键值对配置,支持 text / image / video / json 四种类型。
微信 AppID/Secret 存储在此,无需环境变量,可在后台动态修改。
五、技术亮点与复杂问题解决
🏆 亮点 1:双余额体系与充值赠送规则引擎
难点:用户充值时,不同档位赠送不同金额,赠送部分不可提现但有有效期。消费时需优先消耗赠送余额。
解决方案:
- 设计 recharge_balance(可提现本金)+ bonus_balance(不可提现赠送)双字段
- DepositBonusRule 模型支持固定金额/百分比两种赠送逻辑,按优先级排序
- 充值交易自动匹配最优规则,赠送额自动拆分入 bonus_balance
- 扣费时先扣 bonus_balance,余额不足再扣 recharge_balance
- 40 万行测试代码覆盖了从充值、赠送、消费、退款的全路径
🏆 亮点 2:订单状态机(状态模式)
难点:订单有 7 种状态,状态转换必须严格受控,不能出现非法跃迁。
解决方案:
- 在 Order 模型中通过 status 字段 + clean() 方法实现显式状态转换矩阵
- 每个状态转移都校验前置条件(如退款需订单已完成 / 已支付)
- 配合优惠券核销、余额扣减、支付状态联动
- 测试覆盖了所有状态转换路径和边界情况
🏆 亮点 3:店铺级权限隔离
难点:一个系统管理多家门店,每家店的管理员只能操作自己的店铺数据。
解决方案:
- ShopAdminAssignment 模型将 Django User 绑定到特定店铺
- 自定义 IsShopAdmin 权限类 — 超级管理员拥有全部权限,普通管理员自动限制数据范围
- 所有管理员端视图集继承该权限类,数据查询自动添加店铺过滤
🏆 亮点 4:自动 API 文档
集成 drf-spectacular 自动生成 OpenAPI 3.0 规范文档:
- 自定义 AutoSchema 子类修复了 Swagger UI 的认证锁状态
- 支持 /api/schema/(JSON)和 /api/schema/swagger-ui/(交互式文档)
- 所有接口有完整的请求/响应模型描述
六、测试体系
项目严格遵循 TDD(测试驱动开发),测试覆盖所有核心业务路径:
| 测试范围 | 文件数 | 覆盖内容 |
|---|---|---|
| 店铺模型测试 | 6 个模块 | 模型验证、状态机、金额校验、优惠券逻辑 |
| 店铺视图测试 | 6 个模块 | 所有 API 端点请求/响应、权限校验 |
| 管理员视图测试 | 4 个模块 | 订单管理、支付管理、数据看板、权限隔离 |
| 支付流程测试 | 1 个模块 | 余额支付、优惠券核销、退款回滚 |
| 用户测试 | 6 个模块 | 登录/注册、地址管理、充值赠送、双余额拆分 |
| 内容测试 | 3 个模块 | 轮播图、公告、反馈 |
| 系统/博客测试 | 4 个模块 | 配置、行政区划、博客模型与视图 |
测试命令:
python manage.py test # 全部测试
python manage.py test apps.shops # 单个应用
七、部署架构
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ 微信小程序 │────▶│ Nginx 443 │────▶│ Gunicorn │
│ (用户端) │ │ (反向代理) │ │ :8000 │
└─────────────┘ │ ├ /static/ │ │ Django App │
│ └ /media/ │ └─────────────┘
┌─────────────┐ └──────────────┘ │
│ Web 管理端 │───────────────▶ HTTPS SQLite/PostgreSQL
└─────────────┘ └─────────────┘
- Gunicorn:workers = CPU × 2 + 1,sync worker 模式
- Nginx:
/static/直接文件服务(带缓存),/media/直接文件服务 - systemd:自动守护进程,崩溃自愈
- 一键部署脚本:
deploy.sh支持--install/--start/--daemon/--restart/--logs等完整生命周期管理
八、适用场景
本项目展示了我独立完成中大型 Django 后端项目的完整能力,适用于:
| 接单方向 | 匹配度 |
|---|---|
| 🛵 小程序 / 餐饮 / 电商后端开发 | ⭐⭐⭐⭐⭐ 完全匹配 |
| 🏗️ Django / DRF 项目开发 | ⭐⭐⭐⭐⭐ 完全匹配 |
| 🔧 现有系统重构 / 功能迭代 | ⭐⭐⭐⭐⭐ 设计模式清晰,易于扩展 |
| 📊 数据看板 / 管理后台开发 | ⭐⭐⭐⭐⭐ 8 维分析体系 |
| 💳 支付 / 会员 / 优惠券系统 | ⭐⭐⭐⭐⭐ 完整实现 |
| 🧪 测试体系建设 | ⭐⭐⭐⭐⭐ 40 万行测试用例 |
| 🚀 项目部署运维 | ⭐⭐⭐⭐ 自动化部署 + 日志切分 |
九、联系我
- 邮箱:qinyu0504@163.com
- 微信:jasonqin2011
可提供: - 在线 Swagger API 文档展示 - 项目架构设计思路讲解 - 同类项目快速开发(餐饮、零售、预约、会员体系)
✅ 代码规范、注释完整、测试覆盖、生产就绪。
欢迎沟通需求、索取作品展示链接或预约技术交流。