温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片!
摘要
本系统基于Django框架开发,采用MySQL数据库,面向就餐顾客、入驻商家、配送骑手、平台管理员四类用户,围绕多商户外卖业务设计。系统包含商家入驻审核、菜品管理、购物车、在线下单、订单状态跟踪、配送接单、支付结算、评价晒单、退款售后、数据统计等功能模块。顾客在线浏览不同商家菜品,加入购物车下单,跟踪骑手配送进度;商家管理菜品库存,接单出餐,处理退款;配送员抢单配送,更新送达状态;管理员审核商家入驻,监管订单与评价,统计平台经营数据。系统整合校园周边多商家外卖资源,实现下单、接单、配送全流程线上流转,解决传统单店外卖覆盖有限、配送调度分散的问题,提升外卖订购与配送效率。
技术栈
后端使用Django作为Web框架,通过内置ORM完成数据模型映射与数据库操作,利用Django Admin快速搭建后台管理。数据库选用MySQL存储商家、菜品、订单、配送员等业务数据,Redis缓存购物车、热销菜品、登录会话,降低数据库压力。前端采用Bootstrap配合jQuery开发页面,通过Ajax实现无刷新下单、订单状态轮询;ECharts绘制商家销量、平台营收等统计图表。使用Django Auth模块做身份认证与角色权限划分,区分顾客、商家、骑手、管理员权限;集成PIL处理菜品图片压缩,xlwt实现订单报表导出,全局异常中间件统一捕获错误信息。整套技术栈开发高效、生态成熟,适合作为计算机专业毕业设计选题。
具体实现截图

## 系统设计
系统采用MVT架构,分为模型层、视图层、模板层,按业务划分为六大模块。用户模块实现顾客、骑手、商家注册登录,个人信息维护;商家模块完成入驻申请、菜品上架、接单出餐、营业状态切换;购物车订单模块支持菜品加入购物车、下单支付、订单状态查询;配送模块实现骑手抢单、取餐确认、送达打卡;评价售后模块完成订单评分、商家回复、退款申请;后台管理模块审核商家入驻、管理菜品、监控平台订单、统计营收数据。四类角色权限隔离,顾客只能浏览下单评价,商家管理自己店铺菜品订单,骑手只处理配送任务,管理员拥有全局权限。各模块低耦合,通过视图接口交互,便于后续拓展满减活动、会员红包等营销功能。
## 核心代码
```python
# views.py
from django.shortcuts import render
from django.http import JsonResponse
from .models import Dish, Order, Cart
from django.core.paginator import Paginator
# 分页查询商家菜品
def dish_list(request, shop_id):
keyword = request.GET.get("keyword", "")
dish_query = Dish.objects.filter(shop_id=shop_id, status=1)
if keyword:
dish_query = dish_query.filter(name__contains=keyword)
paginator = Paginator(dish_query, 12)
page_num = request.GET.get("page", 1)
page_info = paginator.get_page(page_num)
return render(request, 'dish/list.html', {"page_info": page_info})
# 顾客提交订单
def submit_order(request):
if request.method == "POST":
user_id = request.session.get("user_id")
cart_items = Cart.objects.filter(user_id=user_id)
if not cart_items.exists():
return JsonResponse({"code": 500, "msg": "购物车为空,无法下单"})
total_price = sum(item.dish.price * item.count for item in cart_items)
order = Order.objects.create(user_id=user_id, total=total_price, status=0)
cart_items.delete()
return JsonResponse({"code": 200, "msg": "下单成功,商家正在备餐"})
return JsonResponse({"code": 500, "msg": "请求方式错误"})
# 骑手更新配送状态
def update_delivery_status(request):
order_id = request.POST.get("order_id")
status = request.POST.get("status")
Order.objects.filter(id=order_id).update(status=status)
return JsonResponse({"code": 200, "msg": "配送状态更新成功"})
数据库设计
数据库基于 MySQL 设计,根据外卖业务实体建立数据表,设置外键关联保证数据一致性。核心数据表包括用户表 user,存储账号、密码、角色、手机号;商家表 shop,记录店铺名称、地址、营业执照、审核状态;菜品表 dish,关联商家 id,保存菜名、价格、图片、库存、分类;购物车表 cart,关联用户 id 和菜品 id,记录选购数量;订单表 order,保存订单编号、用户 id、总金额、订单状态、配送骑手 id;订单详情表 order_item,关联订单和菜品 id,记录数量单价;评价表 review,关联订单 id,记录评分、评价内容。所有表统一设置自增主键,添加创建时间、更新时间字段,针对菜品名称、订单编号建立索引,优化查询性能,减少数据冗余,满足外卖平台数据存储需求。
系统测试
系统采用单元测试结合黑盒功能测试开展测试工作。单元测试重点对订单金额计算、购物车清空、状态流转等核心逻辑编写测试用例,校验库存扣减、重复下单拦截是否正确。黑盒测试模拟顾客、商家、骑手、管理员四类角色,依次测试注册登录、菜品浏览、加入购物车、提交订单、商家接单、骑手抢单送达、评价、后台商家审核等完整业务流程。同时覆盖异常场景,空购物车下单、库存不足、越权修改他人订单、空地址提交、非法参数等,记录接口返回、页面展示与数据变化,及时修复发现的缺陷。经过多轮测试,系统运行稳定,订单流转准确,权限控制有效,数据读写无误,页面交互流畅,满足多商户外卖平台业务需求。



