第一章:项目初始化与环境搭建
各位同学,欢迎来到《手写ERP系统核心模块实战》的第一章。
说实话,很多新手做项目,上来就写代码。结果呢?写到一半发现环境冲突,数据库选错了,目录乱成一锅粥。我见过太多这样的案例了。所以这一章,咱们先把地基打牢。
1.1 Python虚拟环境搭建
为什么要用虚拟环境?说白了,就是隔离依赖。
你想想看,你电脑上可能同时有Django 3.2和Django 4.2的项目。如果没有虚拟环境,它们会打架。我当年刚入行时,就因为全局装了某个包,导致公司老项目直接崩了。嗯,从那以后,我养成了每个项目必建虚拟环境的习惯。
我个人习惯用 venv,Python 3.3+ 自带,轻量又好用。当然,你也可以用 conda 或 poetry,看团队习惯。
创建虚拟环境:
# 进入项目目录
mkdir erp-system
cd erp-system
# 创建虚拟环境(我习惯叫 venv)
python -m venv venv
# 激活虚拟环境
# Windows:
venv\Scripts\activate
# macOS/Linux:
source venv/bin/activate
# 验证是否激活
which python # 应该指向 venv 目录下的 python
小技巧: 我习惯在项目根目录放一个 .python-version 文件,写上 Python 版本号。这样队友一看就知道该用哪个版本。
1.2 Django vs FastAPI:框架选型
这个问题,几乎每个做ERP的人都会纠结。我直接说结论:
| 维度 | Django | FastAPI |
|---|---|---|
| 学习曲线 | 中等(自带ORM、Admin) | 低(轻量,但需自己搭ORM) |
| ORM | 内置,成熟稳定 | 需搭配 SQLAlchemy 或 Tortoise |
| Admin后台 | 自带,开箱即用 | 需第三方库(如 FastAPI Admin) |
| 性能 | 中等(同步为主) | 高(原生异步) |
| 社区生态 | 极其丰富 | 快速成长中 |
| 适合场景 | 传统ERP、CMS、后台管理 | 高并发API、微服务 |
我个人建议:做ERP系统,首选Django。为什么?
- ERP的核心是数据管理和业务流程,不是高并发。
- Django自带Admin后台,省去你写大量CRUD的时间。
- Django ORM的迁移机制,在ERP这种长生命周期项目中太重要了。
当然,如果你要做的是ERP的API网关,或者需要处理大量实时数据,那FastAPI更合适。我在一个项目中就遇到过这种情况——核心业务用Django,对外API用FastAPI,两者通过消息队列通信。
避坑指南: 我曾经见过一个团队,为了追求“新技术”,用FastAPI做整个ERP。结果开发到一半发现,没有现成的Admin后台,权限管理要自己写,数据迁移要自己配。最后工期翻了一倍。所以,选框架别只看技术热度,要看项目类型。
1.3 数据库选型:PostgreSQL vs MySQL
这个问题,我直接给结论:ERP系统,选PostgreSQL。
为什么?我给你列几个关键点:
- 事务支持: PostgreSQL的MVCC实现更成熟,适合ERP这种高并发读写场景。
- 复杂查询: ERP经常需要多表关联、窗口函数、CTE。PostgreSQL的优化器比MySQL强太多。
- JSON支持: ERP中经常需要存一些非结构化数据(比如配置、扩展字段)。PostgreSQL的JSONB字段,比MySQL的JSON好用得多。
- 扩展性: 支持分区表、并行查询、物化视图。这些在ERP报表场景下太实用了。
当然,MySQL也不是不能用。如果你的ERP规模很小(比如几十个用户),或者团队对MySQL更熟悉,那用MySQL也没问题。但如果你要做的是企业级ERP,我建议直接上PostgreSQL。
安装与配置:
# macOS (Homebrew)
brew install postgresql@15
brew services start postgresql@15
# Ubuntu/Debian
sudo apt update
sudo apt install postgresql postgresql-contrib
sudo systemctl start postgresql
# 创建数据库
sudo -u postgres createdb erp_db
# 设置密码(重要!)
sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'your_password';"
个人经验: 我习惯在开发环境用 docker-compose 跑PostgreSQL,这样版本切换方便,也不会污染宿主机。生产环境再用云数据库。
1.4 项目目录结构设计
目录结构这东西,没有标准答案。但我有一套经过多个项目验证的模板,分享给你:
erp-system/
├── apps/ # 所有业务模块
│ ├── common/ # 公共模块(基础模型、工具类)
│ ├── inventory/ # 库存管理
│ ├── sales/ # 销售管理
│ ├── purchase/ # 采购管理
│ ├── finance/ # 财务管理
│ └── hr/ # 人力资源管理
├── config/ # 配置文件
│ ├── settings/ # Django settings 分环境
│ │ ├── base.py # 公共配置
│ │ ├── dev.py # 开发环境
│ │ └── prod.py # 生产环境
│ ├── urls.py # 主路由
│ └── wsgi.py # WSGI 入口
├── docs/ # 文档
├── scripts/ # 运维脚本
├── static/ # 静态文件
├── templates/ # 模板文件
├── tests/ # 测试
├── venv/ # 虚拟环境(不提交)
├── .env # 环境变量(不提交)
├── .gitignore # Git 忽略规则
├── requirements.txt # 依赖清单
├── manage.py # Django 管理脚本
└── README.md # 项目说明
这个结构有几个好处:
- 模块化: 每个业务模块独立成app,互不干扰。
- 配置分离: 开发、测试、生产环境配置分开,避免误操作。
- 测试独立: 所有测试放在一起,方便CI/CD集成。
避坑指南: 我曾经见过一个项目,把所有代码都塞在 apps/ 下面,连配置文件都放进去。结果后来要拆分微服务,发现耦合得一塌糊涂。所以,从一开始就要把配置、脚本、文档和业务代码分开。
1.5 Git版本控制初始化
Git是每个开发者的基本功。但很多人只停留在 git add 和 git commit 上。我来说说ERP项目应该怎么用Git。
首先,创建 .gitignore 文件:
# Python
__pycache__/
*.py[cod]
*.so
*.egg-info/
dist/
build/
# 虚拟环境
venv/
.venv/
# 环境变量
.env
.env.local
# IDE
.idea/
.vscode/
*.swp
*.swo
# 数据库
*.sqlite3
*.db
# 操作系统
.DS_Store
Thumbs.db
然后,初始化仓库:
git init
git add .
git commit -m "chore: 初始化ERP项目结构"
# 关联远程仓库(以GitHub为例)
git remote add origin git@github.com:yourname/erp-system.git
git push -u origin main
我个人习惯用 Git Flow 分支模型:
main:生产分支,只接受合并请求。develop:开发分支,日常开发基于此。feature/*:功能分支,从develop拉出,完成后合并回develop。release/*:发布分支,从develop拉出,测试通过后合并到main和develop。hotfix/*:紧急修复分支,从main拉出,修复后合并到main和develop。
小技巧: 我习惯在每次commit时,写清楚「做了什么」和「为什么做」。比如 feat: 添加库存盘点功能,支持批量导入导出。这样半年后回头看,还能知道当时的设计意图。
本章小结
好了,第一章的内容就到这里。我们做了几件事:
- 搭建了Python虚拟环境
- 选定了Django作为主框架
- 选择了PostgreSQL作为数据库
- 设计了项目目录结构
- 初始化了Git版本控制
这些看起来都是基础工作,但基础不牢,地动山摇。我见过太多项目,因为环境问题、目录混乱、版本失控而返工。所以,别嫌麻烦,把这些做好,后面写代码会顺畅很多。
下一章,我们开始搭建Django项目,配置数据库连接,并跑通第一个Hello World页面。到时候见。
公众号:蓝海资料掘金营,微信deep3321