================================================================
1. 系统定位:基于 Django + MySQL 的 B/S 架构"美食推荐系统",
实际上是"餐厅点餐+预约选座+厨房接单"一体化的餐饮管理系统。
2. 三类角色(这是本文最大特点,别的Django课题少见):
- 用户(前台):浏览美食、购物车、下单支付、预约选座、
美食资讯、留言板、赞/踩、收藏、评论
- 管理员(后台):用户管理、美食管理、美食分类管理、
预约选座审核、厨房管理、厨房订单、留言回复、订单管理、系统管理
- 厨房(第二后台):只看属于自己的厨房订单(做菜端)
3. 技术栈:Python 3.x + Django(MVT)+ MySQL + B/S + Ajax,
前端模板渲染,无前后端分离,无独立推荐算法模块。
4. MVC vs MVT:论文4.1节说"采用MVC模型",Django实际是
MVT(Model-View-Template),M对应Model,V对应View(=MVC的C),
T对应Template(=MVC的V)。答辩要能讲清这个映射关系。
5. 数据库17张表,核心表:美食表(meishi相关字段全拼音)、
美食分类、美食评论、预约选座、厨房订单、用户、购物车、
收藏、地址、订单、留言板、美食资讯、关于我们、配置文件、用户表。
6. 字段命名全拼音:caiming(菜名)、meishifenlei(美食分类)、
kouwei(口味)、hunsu(荤素)、zuoweihao(座位号)、
shangcaishijian(上菜时间)——答辩前要能随口说出含义。
7. "推荐"的实现方式(重要!):系统里没有任何协同过滤/内容推荐
算法,"推荐"靠的是:①收藏表里的 inteltype(推荐类型)字段
②点赞/踩计数(thumbsupnum/crazilynum)③点击量(clicknum)
④美食分类导航。本质是"分类浏览+热度排序",不是算法推荐。
这是答辩最容易被追问的点,务必准备话术。
8. 表结构模板痕迹:表4-5"配置文件"、表4-12"收藏表"的
type字段注释里有"31:竞拍参与、41:关注"——竞拍功能与本系统
毫无关系,是通用毕设模板自带的,说明整套代码是模板改造。
9. 表4-10与表4-15重复:两张"关于我们"表一模一样出现两次,
目录却只承诺过一次,凑表数痕迹明显,答辩前建议自查改掉一张。
10. 论文最大硬伤:2.1节讲Python时大谈NCL、netCDF4、Xarry
(这些都是气象数据处理工具,跟美食系统毫无关系),是从
气象/科学计算类毕设里抄来的段落——答辩前必须重写这节,
否则老师一问"NCL是什么"就穿帮。
================================================================
【一、论文结构总览】
================================================================
第一章 绪论
1.1 研究背景——信息化管理大趋势 + 餐饮人工管理低效
1.2 社会调查——调研"中美健身的佳成软件"(VS+SQL开发)
1.3 研究意义——改善查看信息难、提高管理效率
1.4 研究内容——三端功能划分
第二章 关键技术介绍
2.1 Python语言(被污染的一节,见雷点1)
2.2 Django框架(MVT、ORM、命名由来:吉他手Django Reinhardt)
2.3 MySQL数据库(关系型 vs 非关系型、优缺点)
2.4 B/S架构(跨平台、低维护成本)
第三章 系统分析
3.1 业务需求分析(人工管理三大痛点:使用不便/管理复杂/效率低)
3.2 非功能需求(可行性/完整性/简单/安全)
3.3 可行性分析(技术/经济/操作)
3.4 系统用例分析(管理员/厨房/用户三张用例图)
3.5 系统流程(登录/添加信息/删除三张流程图)
第四章 系统设计
4.1 框架设计(MVC三层:表示层/逻辑层/数据库层)
4.2 功能模块设计(总体功能结构图)
4.3 数据库设计(概念设计5张E-R实体图 + 17张表结构)
第五章 系统实现
5.1 前台功能(首页/注册/美食详情/个人中心)
5.2 后台模块(管理员11个功能 + 厨房端厨房订单)
第六章 系统测试
6.1 白盒/黑盒测试法(概念叙述)
6.2 测试用例(登录测试表6条 + 商品信息管理测试表3条)
结论 / 参考文献10篇 / 致谢
================================================================
【二、核心技术点精讲】(答辩必问,逐个吃透)
================================================================
■ Django框架(MVT)
- Model(模型):用Python类定义数据结构,通过ORM映射到MySQL表,
一个类=一张表,一个类属性=一个字段。
- View(视图):接收HttpRequest,处理业务逻辑,返回HttpResponse
或渲染模板。Django的View相当于MVC里的Controller。
- Template(模板):HTML+Django模板语言({{变量}}、{%标签%}),
相当于MVC里的View。
- URL分发:urls.py里用path()把URL正则映射到视图函数。
- 论文提到的Django五大组件:①ORM对象关系映射 ②自动生成管理
后台(admin.site.register后自带增删改查)③URL设计(正则路由)
④模板语言 ⑤缓存系统。
- 命名由来:纪念比利时吉普赛爵士吉他手 Django Reinhardt。
■ ORM(对象关系映射)
- 好处:不写SQL也能操作数据库(User.objects.filter(...)),
换数据库只改配置;防SQL注入有天然优势(参数化查询)。
- 注意:论文4.1节说"引进MybatisORM持久性架构"是错的!
MyBatis是Java生态的,Python/Django用的是自带的Django ORM。
这是模板拼接的明显痕迹(从Java毕设抄来的),答辩被问到要
能纠正:本系统用的是Django ORM。
■ MySQL
- 关系型数据库,C/S体系,开源免费、体积小、速度快、多线程,
支持事务(InnoDB引擎)。
- 论文观点(要会背):中小型系统首选;事务/非事务两种存储机制
(InnoDB支持事务+行锁,MyISAM不支持事务但读快)。
- 与Django连接:settings.py 里 DATABASES 配置 ENGINE
(django.db.backends.mysql)+ NAME + USER + PASSWORD。
■ B/S架构
- 浏览器/服务器模式,客户端零安装,升级只改服务器端,
- 与C/S对比:C/S性能强但要装客户端;B/S跨平台、维护成本低。
- 本系统:浏览器 → Django(python manage.py runserver 或
uwsgi+nginx部署) → MySQL。
■ Ajax
- 论文4.1节提到用Ajax实现"网页局部动态改变"。
- 典型场景:点赞/踩数字+1不用整页刷新、购物车数量修改、
评论提交。答辩若问"Ajax在系统哪里用了",就答这三处。
================================================================
【三、数据库设计拆解】
================================================================
★ 表4-2 美食表(核心业务表):
id主键 / addtime创建时间 / caiming菜名 / meishifenlei分类 /
kouwei口味 / hunsu荤素 / tupian图片(longtext存base64或URL) /
zhuliao主料 / jianjie简介 / thumbsupnum赞数(默认0) /
crazilynum踩数(默认0) / clicktime最近点击时间 /
clicknum点击次数 / price价格(float)
—— 赞踩+点击这四个字段就是"热度推荐"的数据基础。
★ 表4-4 预约选座表:
zhanghao账号 / xingming姓名 / zuoweihao座位号(int) /
daodashijian到达时间 / sfsh是否审核(默认"待审核") /
shhf审核回复 —— 用户先预约,管理员审核通过才锁定座位。
★ 表4-7 厨房订单表:
dingdanbianhao订单编号 / caiming菜名 / meishifenlei分类 /
kouwei口味 / zuoweihao座位号 / shangcaishijian上菜时间 /
beizhu备注 —— 用户点餐后生成,厨房端按座位号+上菜时间做菜。
★ 表4-14 订单表(电商通用结构):
orderid订单编号 / tablename商品表名(默认meishi) /
goodid / goodname / picture / buynumber数量 / price单价 /
discountprice会员价 / total总价 / discounttotal折扣总价 /
type支付类型 / status状态 / address收货地址 / tel /
consignee收货人 / logistics物流 —— 典型"通用商城"订单模板。
★ 表4-12 收藏表(推荐逻辑藏在这里):
userid用户id / refid商品id / tablename表名 / name名称 /
type类型(1收藏 21赞 22踩 31竞拍参与 41关注) /
inteltype推荐类型 —— 前端"猜你喜欢"按inteltype聚合。
其余表速记:美食分类(3字段)、美食评论(refid关联菜品+reply回复)、
用户(账号密码+money余额)、用户表(username/password/role管理员)、
厨房(厨房账号+money余额)、购物车(tablename+goodid+buynumber)、
地址(收货人+isdefault默认地址)、美食资讯、留言板(content+reply
成对)、关于我们(标题副标题+3图)、配置文件(name/value键值对)。
----------------------------------------------------------------
E-R概念设计(4.3.1节给了5张实体属性图):
美食评论实体、用户实体、预约选座实体、余额实体、美食资讯实体。
答辩问"数据库设计流程"标准答法:需求分析 → 概念设计(E-R图,
实体+属性+联系)→ 逻辑设计(E-R图转关系模式)→ 物理设计
(确定MySQL字段类型、长度、主外键、索引)。
----------------------------------------------------------------
================================================================
【四、功能实现细节】
================================================================
前台(用户端):
1. 首页:轮播+分类导航+美食列表,未登录可浏览,下单需登录。
2. 注册:账号/密码/姓名等,注册后role为用户。
3. 美食详情页:图片、价格、主料、简介 + 操作按钮:
[添加到购物车] [立即购买] [预约选座] [赞一下] [踩一下]。
4. 购物车:改数量、勾选、结算生成订单(写orders表)。
5. 个人中心:改资料、我的订单、我的收藏、余额(money字段)。
6. 留言板:发留言可带图,管理员后台回复。
后台(管理员端,图5-6~5-11):
- 用户管理:按姓名/性别查询、用户比例统计(图表)。
- 美食管理:按菜名/价格查询,新增/修改/删除/查看评论。
注意论文5.2.1原话"删除教室信息列表"——"教室"是错的,
模板残留错别字,实为"美食信息"。
- 预约选座管理:审核(sfsh 待审核→通过)。
- 厨房管理:维护厨房账号。
- 厨房订单管理:把订单分派给厨房。
- 留言板管理:查询、回复。
- 订单管理:查所有用户订单。
厨房端(图5-12~5-13):
- 登录后仅"系统首页+个人中心+厨房订单管理"三个菜单。
- 按菜名/分类/口味/座位号/上菜时间查询订单,只能"详情"
查看(不能改),做菜完成即完成闭环。
业务闭环串讲(答辩用):
用户浏览美食 → 加购/立即购买 → 生成订单 → 管理员分派 →
厨房接单做菜 → 按座位号上菜 → 用户消费 → 评价/点赞。
另一条线:用户预约选座 → 管理员审核 → 到店按座位号就餐。
================================================================
【五、答辩高频问题预测】(14问,含参考答案要点)
================================================================
Q1 你的"推荐"到底是怎么实现的?
A:不要说协同过滤(论文里没有)。标准答法:系统采用"分类
引导+热度排序+行为记录"的轻量推荐思路——①首页按美食分类
聚合展示;②菜品按点击量(clicknum)、赞数(thumbsupnum)排序,
高热度菜品优先曝光;③用户行为(浏览/收藏/赞踩)写入收藏表
的inteltype推荐类型字段,为后续个性化推荐预留了数据基础。
如老师追问"为什么不用协同过滤",答:数据冷启动阶段样本量
不足,且本系统侧重餐饮点餐主流程,推荐作为辅助功能,
后续版本可基于已有行为数据引入协同过滤。
Q2 Django的MVT和MVC什么关系?
A:MVT是Django对MVC的具体实现。Model负责数据,Template负责
展示,View负责业务逻辑调度——Django的View承担了MVC中
Controller的职责,Django的Template对应MVC的View。
用户请求 → urls.py路由 → View处理 → Model读写数据库 →
Template渲染 → 返回浏览器。
Q3 三类角色怎么区分登录的?厨房端如何只看到自己的订单?
A:登录时选角色,用户表/厨房表分开建(用户表role字段存管理员,
厨房表单独有chufangzhanghao账号密码)。厨房登录后查询
厨房订单时按厨房账号过滤,只展示分派给本厨房的订单。
Q4 预约选座的审核流程?
A:用户提交预约(账号/姓名/座位号/到达时间),sfsh字段默认
"待审核";管理员在预约选座管理里查看,通过则可填写shhf
审核回复;用户端看到审核结果,通过后座位保留。
Q5 购物车到订单的流程?数据表怎么变化的?
A:加购时写cart表(tablename=meishi、goodid、buynumber、
price、discountprice);结算时按商品分组生成orders记录,
计算total=price×buynumber(会员用discounttotal),
状态status初始为"未支付",支付后更新,随后清空对应购物车。
Q6 赞和踩的数据存在哪?怎么防重复点赞?
A:菜品表有thumbsupnum/crazilynum计数字段,同时收藏表按
type=21/22记录"谁赞的/谁踩的"明细。防重复:点赞前先查
收藏表该用户+该菜品+该type是否已有记录,有则提示已赞。
(若实现没做防重,就答"记录明细表为实现防重提供了条件")
Q7 数据库为什么选MySQL不选MongoDB?
A:本系统数据是强关系型(用户-订单-菜品-评论多对多关联),
需要事务保证(下单+扣余额+清购物车要原子性),MySQL的
InnoDB支持ACID事务和行级锁;MySQL生态成熟、免费、与
Django ORM配合好。MongoDB适合文档型弱结构数据。
Q8 系统测试怎么做的?
A:以黑盒测试为主(按功能点设计用例验证输入输出),白盒为辅
(关键逻辑分支覆盖)。论文给了登录模块6条用例:空输入/
不存在账号/密码不匹配/验证码错误/正确账号密码×2,
预期与实际全部一致。环境:Windows 8/10 + MySQL。
Q9 白盒和黑盒的区别?
A:黑盒不看代码,只验证功能是否符合需求(等价类、边界值);
白盒基于代码逻辑设计用例(语句覆盖、判定覆盖、条件覆盖)。
本系统业务以表单提交为主,黑盒性价比高。
Q10 B/S和C/S区别?为什么选B/S?
A:C/S需装客户端、性能好、适合局域网高频交互;B/S浏览器即用、
零安装、升级只在服务器端、跨平台。美食系统用户群体广、
使用频率低频多样,B/S维护成本最低,故选B/S。
Q11 项目里最难的部分?
A:可答"多角色权限隔离"——管理员/厨房/用户三端功能边界,
通过分表+role字段+视图层过滤实现;或答"订单流转状态机",
从购物车→订单→厨房订单的状态同步,需保证数据一致性
(事务)。
Q12 密码是明文存的吗?(老师常突击)
A:如实看代码:论文表结构mima是varchar(200),模板系统通常
是明文或简单MD5。安全答法:"当前版本用MD5摘要存储,
我知道MD5存在彩虹表风险,改进方向是加盐哈希
(如Django自带的PBKDF2,settings里PASSWORD_HASHERS
配置即可)。"千万不要答"明文存储没问题"。
Q13 系统有什么不足?怎么改进?
A:①推荐是热度排序,未引入协同过滤/内容推荐算法,后续可
用用户-菜品评分矩阵做UserCF/ItemCF;②未前后端分离,
可改Django REST Framework提供API;③并发场景未做
Redis缓存热点菜品;④支付是模拟支付,未对接微信/支付宝。
Q14 部署方式?manage.py runserver能上线吗?
A:runserver是Django自带开发服务器,单线程、性能差,仅用于
开发调试。生产部署:uWSGI/Gunicorn + Nginx反向代理 +
MySQL独立实例,静态文件由Nginx直供,DEBUG=False,
ALLOWED_HOSTS配置域名。
================================================================
【七、高危雷点清单】(模板套用痕迹与数据矛盾,答辩前必查)
================================================================
雷点1【最高危·必改】2.1 Python语言整节跑题:
"Python不仅可以取代NCL……netCDF4、Numpy、Matplotlib、
Canopy和Xarry以解析和可视化NetCDF格式的数据"——NCL是气象
处理语言,netCDF是气象数据格式,与美食推荐系统毫无关系,
明显从气象/科学计算毕设模板抄来。PPT第4页原样照搬!
答辩前必须重写为Python通用优势(语法简洁、生态丰富、
Django/Flask框架成熟)+本项目用到的库。
雷点2【概念错误】4.1节"引进MybatisORM持久性架构":
MyBatis是Java框架,Python项目不可能用。应改为
"Django ORM"。这是从Java毕设模板拼接的铁证。
雷点3【张冠李戴】3.3.1技术可行性:
"该平台采用python技术,而Eclipse则是利用MySQL进行数据库
的选择……Eclipse是最安全、最稳定的"——Eclipse是Java IDE,
本系统开发环境应是PyCharm/VS Code,此段也是模板残留。
雷点4【调研对象离谱】1.2社会调查:
"我以中美健身的佳成软件作为主要调研对象""佳成软件主要
运用的VS和SQL两种开发工具"——美食推荐系统调研健身软件,
前后毫无关联,明显模板未替换。建议改为调研美团/大众点评
或某餐厅点餐小程序。
雷点5【错别字/串行】5.2.1"删除教室信息列表":
美食管理章节出现"教室",模板从教室管理类系统改来时漏改。
同类还有摘要区"更在的效率"(应为"更大的效率")、
1.1节"人们追求的目标"句子重复、"数据库哭"(应为"库")。
雷点6【表格重复凑数】表4-10与表4-15都是"关于我们"表:
两张表字段一模一样,全文出现两次,明显凑表数,建议删一张
或合并,改编号。
雷点7【表结构模板残留】收藏表type注释:
"类型(1:收藏,21:赞,22:踩,31:竞拍参与,41:关注)"——
"竞拍参与"与本系统无关,是通用商城模板自带枚举,说明
整套代码出自模板,被问到要能解释"预留的通用枚举"。
雷点8【测试用例模板痕迹】6.2登录测试表:
账号是"0003、0047、0013、1242、2721"这类4位数字,
与系统注册账号格式是否一致存疑;"商品信息管理测试表"
里"测试工程"应为"测试项目"、"新增成功"排版错乱。
若老师细看会问这些账号哪来的,准备一句"按边界值和
等价类设计的虚拟测试账号"。
雷点9【经济可行性数据陈旧】3.3.2:
"需要CPU为400MHz及以上的处理器,硬盘100M"——400MHz是
2000年前后配置,2026年答辩现场很扎眼,建议改为
"主流双核CPU/4G内存以上"。
雷点10【PPT封面空占位】第1页"汇报人:"后面空白:
答辩前必须填上姓名学号,否则印象分扣光。
雷点11【元数据泄露】docx最后修改人为"王文娇"、
creator为"Administrator",Company字段为"PC":
文档元数据暴露非本人创作的痕迹,答辩提交前应右键属性
清除个人信息或用"检查文档"功能处理。
雷点12【结论表述矛盾】结论说"系统设计严密性,安全性较高,
各种数据间相互联系"与6.2"该系统虽然功能不是很强大"自相
矛盾——一处自夸严密、一处自谦功能不强,建议统一口径为
"核心功能完整,覆盖餐饮点餐全流程"。
================================================================
【八、知识延展】(资料之外,让自己答得比别人深)
================================================================
1. 推荐算法演进路线(回答"改进方向"时用):
- 基于规则:本系统现状(分类+热度)。
- 协同过滤CF:UserCF(找相似人群推其喜欢的东西)、
ItemCF(推与你买过的商品相似的商品)。核心是相似度
计算(余弦/皮尔逊),数据来自用户-物品评分矩阵。
冷启动问题:新用户无行为、新物品无评分时CF失效。
- 内容推荐CB:按物品特征(本系统有口味、荤素、主料字段,
天然适合做内容标签匹配)。
- 混合推荐:Netflix经典方案,CB解决冷启动+CF提升精度。
- 深度学习推荐:双塔模型(用户塔+物品塔)、DNN排序,
工业界主流是"召回→粗排→精排→重排"漏斗架构。
2. 本系统若真做推荐的最小改造方案(答辩加分项):
前台已有赞踩(type 21/22)和收藏(type 1)行为数据,
可构建 用户-菜品 隐式评分矩阵(赞=3分,收藏=2分,浏览=1分),
用余弦相似度算菜品间相似度,实现ItemCF"吃过的菜相似推荐",
Django里用scikit-learn的cosine_similarity几十行代码即可。
3. Django生态延伸:
- DRF(Django REST Framework):前后端分离时代标配,
Serializer序列化 + ViewSet视图集 + Router自动路由。
- Django Auth体系:自带User模型、login_required装饰器、
session/cookie认证、PASSWORD_HASHERS密码哈希策略。
- 中间件Middleware:请求/响应的洋葱模型,可做登录校验、
日志、限流。
- migrations机制:python manage.py makemigrations +
migrate,模型改动自动生成SQL迁移脚本,版本化数据库变更。
4. 餐饮类系统的行业对标:
- 美团/大众点评:LBS+评价体系+商家版后台,本系统的
"厨房端"相当于简化版商家接单端。
- 扫码点餐系统:桌台二维码→开台→点餐→厨房KDS屏,
本系统"预约选座+座位号上菜"是同一思想的人工版。
- 上一课题(第17个)MPLS VPN是企业网络,本课题是
Web应用,两篇的"可行性分析/测试章节"写法可对比借鉴。
5. 事务与数据一致性(点餐系统刚需知识点):
下单操作=扣余额+生成订单+清购物车三步,必须包在
transaction.atomic()里,任一步失败整体回滚,防止
"钱扣了订单没生成"。Django里用 from django.db
import transaction; with transaction.atomic(): 实现隔离级别默认READ COMMITTED,
可通过InnoDB锁(SELECT ... FOR UPDATE)防超卖。
6. 防SQL注入/XSS/CSRF(安全三件套,安全类问题万能答案):
- SQL注入:Django ORM参数化查询天然防护,禁用raw SQL拼接。
- XSS:模板默认自动转义{{ }}输出,富文本用bleach白名单。
- CSRF:Django自带中间件+{% csrf_token %}表单令牌。