你是不是也这样:写个小脚本飞快,一做大项目就乱成一锅粥?
文件满天飞、模块互相引用、改一处崩三处……别慌,今天就用3个实战级架构思维,带你从“脚本小子”蜕变成“工程老炮儿”。
项目结构不是摆设,是你的代码骨架 🦴
别再把所有.py塞进一个文件夹了!
那不是“简单”,那是“埋雷”。
看看 Flask 官方推荐的结构(简化版):
myapp/
├── app/
│ ├── __init__.py
│ ├── models/
│ ├── views/
│ └── utils/
├── tests/
├── config.py
└── run.py
分层清晰 = 调试省一半命。
models 放数据逻辑,views 处理请求,utils 装工具函数——各司其职,互不打扰。
模块化不是炫技,是为“可维护性”续命 🔧
很多人以为模块化就是拆文件,错!
真正的模块化,是“高内聚、低耦合”。
举个反面教材:
# bad.py
defsend_email(user):
# 连数据库
db = connect_db()
user_data = db.query(...)
# 发邮件
smtp.send(...)
# 写日志
log.write(...)
这函数干了三件事,改一处全炸。
正确姿势:
# services/user_service.py
defget_user(user_id):
return User.query.get(user_id)
# services/email_service.py
defsend_welcome_email(user):
msg = f"Hi {user.name}!"
EmailClient().send(to=user.email, body=msg)
# views/auth.py
defregister():
user = create_user(...)
send_welcome_email(user) # 只调用,不实现
每个函数只做一件事,测试、复用、替换都轻松。
配置与代码分离,别让 secret 上了 GitHub 😱
见过太多人把数据库密码写死在代码里,还 commit 到公开仓库……
这不是失误,这是社死现场。
标准做法:环境变量 + 配置类。
# config.py
import os
classConfig:
SECRET_KEY = os.getenv('SECRET_KEY', 'dev-key-please-change')
DATABASE_URL = os.getenv('DATABASE_URL')
DEBUG = os.getenv('FLASK_ENV') == 'development'
启动时用 .env 文件(记得加到 .gitignore):
# .env
SECRET_KEY=your-super-secret-key-here
DATABASE_URL=postgresql://user:pass@localhost/mydb
生产环境用 K8s Secret 或 AWS Parameter Store,本地开发用 dotenv——安全又灵活。
真实项目长什么样?看个精简模板 👀
别被 Django 那套吓到,小项目也能有大格局:
project/
├── src/
│ ├── core/ # 核心业务逻辑
│ ├── api/ # 接口层(FastAPI/Flask)
│ ├── domain/ # 领域模型(用户、订单等)
│ └── infra/ # 基础设施(DB、缓存、第三方API)
├── tests/
├── scripts/ # 部署、迁移脚本
├── pyproject.toml # 现代 Python 项目标配
└── README.md
src/ 是你的“干净区”——不放配置、不放临时文件,只放可复用的代码。
架构不是银弹,但能让你少熬500小时夜 🌙
我见过太多人前期图快,后期重构到崩溃。
花1小时设计结构,能省50小时 debug。
记住三个关键词:
分层、解耦、隔离。
不是为了“看起来专业”,而是为了让明天的你,感谢今天清醒的自己。
最后说句掏心窝的
Python 的魅力在于“简单”,但工程的魅力在于“有序”。
脚本可以糙,项目必须稳。
下次新建项目前,先问自己:
“三个月后,我能看懂自己写的这堆东西吗?”
如果答案是否定的——现在就改结构,别等火烧眉毛。🔥