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) 数据存储层(MySQL) 前后端分离架构 RESTful API 通信

这张图展示了咱们系统的四层架构:

  • 展示层:用户看到的界面,咱们用 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 这套技术栈
  • 系统的四层架构是什么样的