Django+小程序实现制造业定制化ERP毕设项目实战

发布时间:2026/9/26 7:47:18
Django+小程序实现制造业定制化ERP毕设项目实战
又到一年毕设选题季每年这个时候后台私信都会被同一个问题塞满老师django 小程序能做什么题目有没有好过、代码量适中、还能写进简历的项目说实话被问得多了之后我发现大部分同学不是不想做而是不知道做什么、做到什么程度算够以及哪些功能点能给答辩老师留下印象。今天这篇我就从我带过项目、也帮人改过不少毕设代码的角度聊一个我愿意重复推荐的选题基于django的制造业工厂定制化ERP系统APP小程序。这个名字听着很长拆开看其实很清晰后端用django数据库用mysql前端用微信小程序承载移动端操作业务场景锁定在制造业工厂的内部管理核心是“定制化ERP”——也就是从市面上通用ERP里抽出一个面向工厂实际作业的垂直版本。如果你正在为毕设选题发愁又想让项目既有业务深度又有技术亮点这个方向值得认真考虑。1. 这个选题为什么对答辩委员会“胃口”先说一个可能不太好听但很真实的事实答辩老师看过的毕设系统太多了电商商城、博客系统、学生管理系统这种通用题目几乎每个班都有一批人做答辩现场的PPT一翻到“系统功能结构图”老师基本就能猜到后面要讲什么。真正能让人眼睛一亮的是那些业务场景足够具体、系统结构足够复杂、并且能清楚说出“我这个系统是给谁用、解决什么实际问题”的项目。制造业工厂ERP恰好符合这个特征。工厂的日常管理涉及销售订单、采购计划、生产工单、库存出入库、BOM物料清单、质检流程、设备维护、人员排班等多个环节而这些环节之间又存在严格的上下游依赖关系——销售接到订单后需要拆解为生产任务生产任务需要检查库存是否满足不满足则触发采购申请物料到货后要质检、入库再领料出库进入生产环节。这套业务链路天然自带复杂度不需要你去虚构需求随便调研一家小工厂就能整理出厚厚一叠业务流程。更关键的是这个选题在答辩时特别好讲。老师问“你这个系统的核心业务是什么”你可以直接甩出一张制造业订单流转图从客户下单到成品出库中间经过了哪些节点、每个节点由谁操作、数据如何流转老师问“你的系统比普通管理系统复杂在哪”你可以讲BOM的管理、生产工单的状态机、库存与采购的联动逻辑。这些内容不是凑出来的而是制造业真实的业务痛点懂的人一听就知道你下了功夫。从评分维度来看毕设评审一般看六个方面选题意义、需求分析完整性、系统设计合理性、技术实现难度、文档规范度、答辩表现。这个题目在“选题意义”上天然加分——制造业数字化是国家鼓励的方向工厂确实需要好用又便宜的ERP在“技术实现难度”上也有足够的发挥空间——如果你能把权限做细、把工单状态流转做好、把数据看板做得直观技术分很容易往上走。说白了评委老师的“胃口”被常见的CRUD项目养刁了你端上来一套有业务逻辑、有角色分工、有数据联动的系统他们是真的愿意多问几个问题而有问题可问恰恰是拿高分的机会。2. 技术栈选型django、mysql、小程序框架之间怎么配技术选型是这个项目里最不需要纠结、但也最容易出错的地方。很多同学一上来就想着“我要用最新的技术”结果把项目复杂度和自己的掌控力完全搞脱节了。对于毕设而言技术栈的判断标准只有一个能不能在三个月内稳定完成、并且你能把每个关键选型的原因讲清楚。2.1 后端为什么选django而不是flask或springbootdjango对毕设项目最大的价值不是功能多而是“自带规范化结构”。它把MTV模式固定在那里app划分、models定义、admin后台、ORM数据库操作都是约定俗成的做法你不需要像用flask那样自己纠结项目该怎么组织——这恰恰是毕设项目最容易翻车的地方代码全部堆在一个py文件里后期想改一个功能牵一发动全身。django的admin后台还能直接在开发阶段帮你管理数据工厂的基础资料物料、供应商、客户录入完全可以用admin顶上省去一笔前端开发工作量。ORM方面django的models层对mysql的支持非常成熟外键关联、多对多关系、事务处理都很顺手。而且答辩时老师必然问数据库设计django的model定义可以直接对应到表结构你在讲解时用代码展示比贴一堆sql建表语句要直观得多。2.2 小程序端框架的取舍标题里说的是“APP小程序”严格来说微信小程序本身就是一种“轻应用”不需要另外套APP壳。我个人的建议是小程序端用原生语言就行不要一上来就上uniapp或者taro。原因有三第一原生小程序的结构足够清晰wxml负责页面结构、wxss负责样式、js负责逻辑和django的MTV思路异曲同工你学习成本低第二毕设答辩时老师可能会现场打开开发者工具看你的代码原生项目的目录结构一眼就能看明白uniapp那种多平台编译工程反而显得臃肿第三微信开发者工具自带调试、真机预览、上传你不需要自己折腾打包配置。当然如果你目标明确想写进简历并且已经有vue基础用uniapp也不是不行但务必清楚一点框架只是手段别让框架本身成为你的学习负担。我见过太多人项目没做多少先花了三周研究uniapp的条件编译完全偏离了主方向。2.3 数据库mysql为什么比sqlite合适mysql在这个项目里的地位不是可有可无而是默认选项。sqlite虽然零配置但它本质是文件型数据库并发写入能力弱而且不太像“生产环境应该用的东西”。答辩时老师如果看到你用sqlite大概率会问为什么不用mysql——这不是故意刁难而是想看你有没有基本的工程判断。mysql的安装和配置网上教程非常多Windows环境下基本是下一步下一步的事关键是把字符集设为utf8mb4否则录入中文数据会乱码。另外建议把mysql装成系统服务避免每次命令行启动的麻烦。3. 定制化ERP的核心业务模块与数据库设计整个系统能不能在答辩现场“立住”关键就看模块拆分和表结构设计。我见过太多人把一个ERP做成“几个增删改查页面拼在一起”本质原因是他们根本没有从业务流程出发设计模块而是从“我能写什么功能”倒推。正确的做法是先从工厂的作业流程里提炼需求再映射为功能模块和数据表。3.1 从业务链路中拆出六大功能模块一套适合制造业小型工厂的ERP最小闭环至少要包含六个模块销售管理客户信息维护、销售订单创建、订单状态跟踪待审核、已审核、生产中、已发货、已完成采购管理供应商管理、采购申请单由生产缺料自动触发或手动创建、采购订单、到货质检入库生产管理生产工单关联销售订单、BOM物料清单、工序流转记录、完工入库库存管理仓库管理、物料出入库、库存流水、库存预警低于安全库存时提示基础资料物料档案、产品档案、客户档案、供应商档案、仓库档案系统管理用户管理、角色管理、菜单权限、操作日志注意“定制化”这三个字的落地方式核心不是系统功能多花哨而是能针对工厂的真实使用习惯做调整。比如物料编码规则、BOM层级、工单号自动生成规则这些细节才是制造业ERP区别于通用进销存的地方。你可以设计一个“系统参数配置”模块允许管理员自定义编码前缀和流水号位数这种细节写到文档里非常加分。3.2 关系型表结构里最关键的几张表数据库设计是答辩高频提问区你需要对核心表的关系了如指掌。这里列出几张最核心的表及其关键字段思路物料表product_material物料编码、物料名称、规格型号、单位、默认供应商、安全库存、当前库存BOM表bom_header / bom_itemBOM编号、产品物料ID、子件物料ID、用量一张BOM头对应多行子件明细销售订单表sale_order / sale_order_item订单编号、客户ID、产品ID、数量、单价、交货日期、状态生产工单表production_order工单编号、关联销售订单、产品ID、计划数量、完成数量、开工日期、状态库存流水表stock_flow物料ID、仓库ID、变动类型入库/出库/盘点调整、数量、关联单据号、操作人、操作时间这里面最考验设计能力的是BOM表它是制造业ERP区别于普通进销存系统的标志。BOM要支持多层级——一个成品由多个半成品组成半成品又由原材料组成在表设计上一般用自关联或父子结构实现。你可以把BOM做成“父项物料子项物料用量”的扁平表通过递归查询组装出层级关系。答辩时能把这个讲清楚老师基本就认定你是真懂业务而不是从网上抄了个系统下来。实体关系上物料和多张单据之间都是多对多关系中间表命名要规范统一维护数据时尽量减少冗余。表结构之间的外键用django的ForeignKey关联即可查询时用select_related和prefetch_related优化这个也是可以在文档和答辩里提的优化点。3.3 状态机设计是ERP的隐形考点工厂业务里每个单据都有状态流转而状态流转是有严格顺序的。销售订单不能从“待审核”直接跳到“已完成”生产工单不能在“未开工”状态下直接“完工入库”。这背后其实是一个状态机的概念如果你用一堆if else在视图里到处判断代码会很快失控。建议用状态字段允许状态变更表的方式来管理每个业务单据定义一个状态流转规则涉及状态变更时先查规则表再决定是否放行。这样做的好处有几个一是业务规则集中管理改起来方便二是答辩时你可以专门给老师讲“我这个状态流转是安全的、受控的”这比说“我用了if判断”高级不少三是后期如果用户提需求要增加新状态只需要加一行规则不用改动视图函数。4. 从零搭建项目的实操路线很多同学拿到这类项目后最大的障碍不是不懂技术而是不知道第一步干什么。我按我用过多次的操作顺序整理了一条直接可抄的路线。以下全部基于Windows PyCharm 微信开发者工具的组合。4.1 环境准备与项目初始化第一步安装python 3.8以上版本建议3.10或3.11用虚拟环境管理依赖。打开命令行工具创建项目专属环境并激活python -m venv venv venv\Scripts\activate # Windows系统激活虚拟环境 pip install django mysqlclient djangorestframework django-cors-headersmysqlclient在Windows上偶尔会报安装失败如果遇到去对应站点下载与python版本匹配的whl文件再安装。之后安装pillow用于图片上传处理、simpleui美化admin后台毕设展示加分利器。第二步创建django项目和一个独立的app来承载ERP业务这样代码目录清爽django-admin startproject mfg_erp . python manage.py startapp erp_core在settings.py里注册app配置mysql数据库连接并设置语言、时区和静态文件路径DATABASES { default: { ENGINE: django.db.backends.mysql, NAME: mfg_erp, USER: root, PASSWORD: 你自己的密码, HOST: 127.0.0.1, PORT: 3306, OPTIONS: {charset: utf8mb4}, } }记得先在mysql中创建好数据库。4.2 数据模型设计与admin配置把第3章提到的核心表在models.py里定义出来。以物料表为例大致是这个样子from django.db import models class Material(models.Model): code models.CharField(max_length50, uniqueTrue, verbose_name物料编码) name models.CharField(max_length100, verbose_name物料名称) spec models.CharField(max_length200, blankTrue, verbose_name规格型号) unit models.CharField(max_length10, verbose_name计量单位) safe_stock models.FloatField(default0, verbose_name安全库存) current_stock models.FloatField(default0, verbose_name当前库存) class Meta: db_table product_material verbose_name 物料档案 def __str__(self): return f{self.code} {self.name}定义完后依次执行数据迁移命令python manage.py makemigrations python manage.py migrate python manage.py createsuperuser注册admin后你就可以在后台先录入测试数据。我强烈建议所有基础档案数据都在这一步录好再开始做前端否则等小程序端做出来之后你还要回头补数据联调效率会很低。4.3 用DRF快速搭建REST API小程序端没法直接读取django模板渲染的页面必须通过接口拿数据所以你需要一套JSON API。用djangorestframework是最省力的方案。一个典型的视图集写法如下from rest_framework import viewsets from .models import Material from .serializers import MaterialSerializer class MaterialViewSet(viewsets.ModelViewSet): queryset Material.objects.all() serializer_class MaterialSerializer在urls.py里用router注册一下就能自动获得一整套增删改查接口from rest_framework.routers import DefaultRouter router DefaultRouter() router.register(materials, MaterialViewSet) urlpatterns [ path(api/, include(router.urls)), ]关键配置点有两个一是django-cors-headers要配好否则小程序开发工具里请求跨域会直接报错二是写一个自定义的Response格式统一返回结构比如{code: 200, message: success, data: {...}}这样小程序端解析接口时不需要每个页面单独判断success或error省很多事。4.4 小程序端目录与页面规划小程序端建议按“模块分包”的思维来组织pages目录不要全部平铺否则几百行json配置看着就头疼。页面规划建议如下登录与个人中心模块微信登录、角色首页不同角色看到不同菜单销售模块订单列表、订单详情、新建订单生产模块工单列表、扫码报工用微信扫码接口实现、完工入库库存模块库存查询、出入库操作、库存预警提示报表模块数据看板今日订单量、生产进度、库存水位请求层封装一个request.js统一处理baseURL、token注入和错误提示。baseURL注意不要用localhost要填你电脑在局域网内的IP地址真机预览时手机才能访问到后端服务。5. 毕设开发中真正会卡住的四个技术点开发过程中有几处地方是绝大多数人都会踩坑的提前知道能省你两三周的痛苦。我按遇到频率排序逐个说排查思路。5.1 小程序端登录鉴权与token失效微信小程序的登录流程是wx.login拿code把code传给后端后端再向微信接口换openid自己签发一个token返回给前端。很多同学卡在“后端不知道怎么调用微信接口”上其实是django里用requests库直接请求微信接口就行。token建议用django内置的Signer类或itsdangerous生成签名token不需要引入复杂的jwt框架。核心代码思路是from itsdangerous import URLSafeTimedSerializer def generate_token(openid): s URLSafeTimedSerializer(你的密钥, saltlogin) return s.dumps({openid: openid})小程序端每次请求在header里带token后端写一个自定义的认证类去解析。如果是djangorestframework最简单的方式是自定义一个Authentication类重写authenticate方法。5.2 websocket实现后端数据实时推送到前端热词里有人搜“django websocket实现后台有数据前端推送”这个正好是制造业ERP里很实用的场景——比如采购订单审核通过后小程序端要立刻收到一条通知“你的采购单已完成审核”。实现方式有两种如果不想引入channels轮询也能用但体验一般想做得漂亮可以用django channels实现websocket在订单状态变更时通过channel layer广播消息。毕设阶段我建议用channels因为它是django官方向的方向而且配置不复杂。要注意的是channels和django版本有兼容性问题务必查好对应版本再安装。这个话题如果讲得好在答辩现场属于亮点中的亮点——大部分同学做的都是纯同步请求你能实时推送整个系统的交互水平直接高了一个档次。5.3 小程序动态设置页面标题这个看起来是个小需求但真做起来不少同学会懵。微信小程序的导航栏标题默认写在页面的json文件里是静态的。想让标题随数据变化比如从“生产工单详情”变成“工单编号MO20250101”需要在js里调用wx.setNavigationBarTitle({ title: 工单详情 - orderNo })这个API在真机上是生效的开发者工具里有时会有滞后不影响最终效果。把它用在ERP系统的单据详情页面里体验会专业很多。5.4 mysql连接时的常见配置大坑这个值得单独拎出来说。很多人明明mysql装好了、navicat也能连但django一跑就报错排查半天发现是mysql8的密码加密方式问题。django的mysqlclient对mysql8默认的caching_sha2_password支持不好需要在mysql里改一下用户密码插件ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 你的密码;另外一个小坑是字符集。创建数据库时务必带上utf8mb4CREATE DATABASE mfg_erp DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;改完这两个地方绝大多数连接问题都能消失。6. 答辩演示、文档整理与导师高频问题接招这一步是毕设里决定最终成绩的临门一脚。同样的项目有的人答辩能拿优秀有的人讲得磕磕绊绊拿及格差别往往不在代码而在准备。6.1 演示流程怎么排才有说服力不要从登录开始演示——那是最无聊的开场。我的建议是设计一条“订单驱动的完整业务闭环”动线让老师顺着你的演示自然看到系统的价值开场先展示系统首页仪表盘今天有多少订单、多少在生产、库存预警有多少条让老师第一眼看到系统是“活的”接着走核心链路新建一个销售订单 → 审核 → 系统自动检查库存并生成生产工单 → 库存不足时生成采购申请 → 采购下单 → 到货入库 → 工单领料 → 完工入库在链路中间穿插权限切换以管理员身份看全部数据切换到车间工人账号发现只能看到自己的待办工单让老师看到角色权限设计最后展示一个你准备好的数据看板用图表显示近一个月的订单趋势或库存周转情况整个演示控制在8分钟以内节奏要快不要在一个页面上翻来翻去。演示前把数据准备好——干净的、有代表性的演示数据比临时录入效果好一百倍。6.2 配套源码、文档与部署说明的“全bao”思路标题里写“附源码、mysql、文档、调试代码讲解全bao等”这是这个项目在二手市场和毕设交易平台很常见的呈现方式。但从负责任的角度我更建议你把这些内容理解为“项目的交付完整性”——一份好的毕设交付物应该包括源码工程后端django完整工程 小程序完整工程数据库脚本文件导出含数据的sql文件项目文档需求分析、数据库设计、接口文档、部署说明演示视频或演示PPT答辩备用技术文档一定要自己写一遍哪怕你参考过别人的项目。写文档的过程本质上是你理清系统逻辑的过程而且答辩时老师问的很多问题你如果提前在文档里梳理过会答得从容得多。数据库设计文档里放实体关系图接口文档里列出每个接口的入参出参示例部署说明里写清环境要求。整套文档写下来光打印出来装订的厚度就足以让老师觉得你工作量饱满。6.3 答辩现场最容易被追问的几个问题与应对思路根据我多年围观和参与毕设答辩的经验这类项目有五个高频问题提前准备好就不会被问住为什么用django不用springboot——要答django开发效率高、自带admin后便于管理、ORM省去SQL编写毕设周期内快速实现业务闭环更合适你的系统相比市面上的ERP差异在哪——核心答定制化配置编码规则、状态流转、角色权限贴合中小型工厂实际流程而不是大而全的通用系统库存是怎么保证准确性的——答所有出入库操作必须关联业务单据销售出库、采购入库、生产领料不允许手工随意改库存数量同时记录库存流水便于追溯如果并发用户多了怎么办——不需要现场优化代码答清楚django处理高并发的通用方案数据库读写分离、缓存、异步任务即可重点是展示你知道存在这个问题且有思路某张表的字段为什么这么设计——从业务角度解释每个字段的来源和用途强调是实际下单/审批流程提炼出来的最后提醒一句不管项目做到什么程度答辩前一定要自己完整跑一遍所有流程把容易出错的边界条件都试一遍。我见过太多演示中途系统崩掉的尴尬场面根因都是没有提前回归测试。你在这个项目上投入的时间不会白费——django的MTV机制、REST API设计、小程序前后端联调、制造业业务逻辑这些都是简历上能写、面试里能聊的实打实的能力。如果看完这篇文章还是不确定从哪开始动手我的建议非常简单先把数据库表建出来把物料档案和BOM数据用admin维护起来然后打开小程序开发者工具调通第一个接口项目就算真正“跑起来”了。后面的事情都是一步一步填出来的。