1. 项目启动与需求分析
说实话,每次开始一个新项目,我最怕的就是「需求还没想清楚就开干」。你想想看,代码写了一半,产品过来说「哎呀,这里要改一下」,那滋味……嗯,我经历过太多次了。
所以这一章,咱们先把配方管理系统的地基打牢。业务背景、功能需求、非功能性需求、技术选型,一个都不能少。
1.1 业务背景:为什么需要配方管理系统?
先说说场景。假设你是一家食品厂、化工企业或者制药公司的技术负责人。每天要处理几十甚至上百个配方——原料配比、工艺参数、版本变更、成本核算……
我见过不少企业还在用 Excel 管理配方。听起来挺方便对吧?但实际用起来问题一堆:
- 版本混乱:张三改了一版,李四不知道,生产线上还在用旧配方
- 权限失控:谁都能打开、谁都能改,出了问题找不到人
- 数据孤岛:配方数据和库存、采购、生产系统各玩各的
- 追溯困难:某个批次出了质量问题,想查当时用的哪个配方版本?得翻半天邮件
说白了,配方管理系统要解决的就是这些问题。它不是一个简单的「增删改查」,而是一个围绕配方生命周期管理的专业工具。
核心价值:统一管理、版本追溯、权限控制、数据集成。
1.2 核心功能需求:CRUD 只是起点
很多人一听到「配方管理」,第一反应就是「不就是 CRUD 吗?」。嗯,从表面看确实如此——创建配方、读取配方、更新配方、删除配方。但实际项目中,每个操作背后都有讲究。
我习惯把功能需求分成三层来梳理:
| 层级 | 功能模块 | 说明 |
|---|---|---|
| 基础层 | 配方 CRUD | 配方的创建、查看、编辑、删除 |
| 业务层 | 版本管理、审批流程、成本核算 | 配方变更可追溯,修改需要审批,自动计算原料成本 |
| 集成层 | 原料库存联动、生产工单对接 | 配方中用到的原料,库存够不够?生产计划能不能排? |
咱们这门课先从基础层做起,后面再逐步扩展。具体来说,核心功能需求包括:
- 配方创建:支持录入配方名称、编号、版本、原料清单(原料名称、用量、单位)、工艺步骤、备注等
- 配方查看:列表展示 + 详情页,支持按名称、编号、状态筛选
- 配方编辑:修改配方内容,修改后自动生成新版本,旧版本保留
- 配方删除:逻辑删除(标记为「已废弃」),而不是物理删除。为什么?因为历史数据可能还要追溯
- 配方版本管理:查看版本历史,支持版本对比,可以回滚到某个历史版本
我的经验:别小看「删除」这个功能。我曾经在一个项目里直接用了物理删除,结果客户说「我要看去年那个配方,虽然它已经不用了」。从那以后,所有涉及业务数据的删除,我都用逻辑删除。
1.3 非功能性需求:性能和安全不能等上线再想
功能需求是「做什么」,非功能性需求是「做得怎么样」。很多项目前期只关注功能,等到上线才发现——慢、不安全、不好用。嗯,那时候再改就晚了。
咱们这个配方管理系统,非功能性需求主要关注两点:
性能需求
- 响应时间:列表查询 < 1 秒,详情查询 < 0.5 秒
- 并发支持:至少支持 50 个用户同时操作
- 数据量:单表配方记录支持 10 万级以上
安全需求
- 认证与授权:用户登录后才能操作,不同角色(管理员、配方工程师、查看者)权限不同
- 数据防篡改:配方一旦发布,不能随意修改,修改必须走版本更新流程
- 操作日志:谁在什么时间做了什么操作,都要记录下来
- 输入校验:防止 SQL 注入、XSS 攻击等常见 Web 安全漏洞
注意:安全不是「加个登录页面」就完事了。我见过一个项目,登录页面做得挺漂亮,结果 API 接口没有任何鉴权,直接拿着 URL 就能访问所有数据。这种坑,咱们不能踩。
1.4 技术选型:为什么是 Python + Flask + MySQL?
技术选型这件事,没有「最好」,只有「最合适」。咱们这门课面向的是有一定编程基础、想系统学习 Web 开发的学员。选 Python + Flask + MySQL,原因有三:
| 技术 | 选型理由 | 适用场景 |
|---|---|---|
| Python | 语法简洁、生态丰富、学习曲线平缓 | 快速原型开发、中小型 Web 应用、数据处理 |
| Flask | 轻量灵活、扩展性强、适合教学和实战 | RESTful API、微服务、中小型项目 |
| MySQL | 稳定可靠、社区活跃、关系型数据库经典代表 | 结构化数据存储、事务处理、报表查询 |
我个人习惯用 Flask 做中小型项目。它不像 Django 那样「全家桶」——你想加什么功能,自己装插件就行。这样你能更清楚地理解每个组件的作用,而不是被框架「包办」了所有事情。
至于 MySQL,虽然现在 NoSQL 很火,但配方管理这种强结构化、强事务的场景,关系型数据库依然是首选。
1.5 系统架构概览:一张图看懂整体设计
说了这么多,咱们用一张图把整体架构串起来。你一看就明白了。
这张图展示了咱们系统的四层架构:
- 展示层:用户看到的界面,咱们用 HTML + CSS + JS 实现
- 业务逻辑层:Flask 处理所有业务逻辑,包括配方 CRUD、版本管理、权限控制等
- 数据访问层:SQLAlchemy ORM 负责和数据库打交道,咱们不用手写 SQL
- 数据存储层:MySQL 存储所有配方数据
前后端通过 RESTful API 通信。这样做的好处是——以后你想加个移动端 App,或者对接其他系统,API 接口可以直接复用。
1.6 开发环境准备:先把工具备齐
在开始写代码之前,先把开发环境搭好。我建议你按这个清单来:
| 工具 | 版本建议 | 用途 |
|---|---|---|
| Python | 3.10+ | 运行环境 |
| Flask | 2.3+ | Web 框架 |
| MySQL | 8.0+ | 数据库 |
| SQLAlchemy | 2.0+ | ORM 工具 |
| Postman / curl | 最新版 | API 测试 |
| VS Code / PyCharm | 最新版 | 代码编辑器 |
小建议:用虚拟环境管理项目依赖。我习惯用 venv 或者 pipenv,这样不同项目之间的依赖不会打架。
1.7 本章小结
这一章咱们把配方管理系统的「地基」打好了。你知道了:
- 配方管理系统要解决什么业务问题
- 核心功能需求不只是 CRUD,还有版本管理、权限控制等
- 非功能性需求(性能、安全)要提前考虑
- 为什么选 Python + Flask + MySQL 这套技术栈
- 系统的四层架构是什么样的