Flask无内置MVC推荐最小可行结构app.py、config.py、extensions.py、models/、services/、api/蓝图、requirements.txt避免伪MVC目录拆分业务逻辑下沉至services/API按版本或调用方隔离而非模型划分。Flask 里没有内置 MVC别硬套目录名Flask 本身不规定结构app.py 放一个文件里也能跑。所谓 “MVC 目录” 是人按习惯组织的不是框架强制的。硬照 Django 或 Spring 的 models/、views/、controllers/ 拆反而容易让路由和业务逻辑脱节。常见错误现象ImportError: cannot import name User from models.user —— 实际是循环导入因为 views.py 导了 models而 models.py 又导了 db它在 app.py 里初始化但 app.py 又导入了 views。把 db、maMarshmallow、login_manager 等扩展实例单独提成 extensions.py避免初始化顺序混乱models/ 下每个文件只定义一类模型如 user.py、post.py统一由 models/__init__.py 导出外部只从 models 导别建 controllers/ 文件夹——Flask 没 controller 层路由函数app.route 蓝图Blueprint就是入口业务逻辑应下沉到 services/ 或 utils/推荐的最小可行目录结构含蓝图为前提真实项目一旦超过 3 个端点就该用蓝图。以下结构经多个中等规模 Flask 项目验证部署、测试、IDE 跳转都顺myflaskapp/├── app.py # 创建 app、注册蓝图、配置加载├── config.py # 配置类DevelopmentConfig, ProductionConfig├── extensions.py # 所有扩展实例db, ma, migrate, jwt 等├── models/│ ├── __init__.py # from .user import User; from .post import Post│ ├── user.py # class User(db.Model): ...│ └── post.py├── services/ # 关键业务逻辑写这里非 CRUD 封装│ ├── user_service.py # create_user(), send_welcome_email()│ └── auth_service.py├── api/ # 蓝图目录按功能域分非按 MVC 层分│ ├── __init__.py│ ├── users.py # bp Blueprint(users, __name__); bp.route(/users)│ └── auth.py└── requirements.txtapi/users.py 里只做参数校验、调 services.user_service.create_user()、返回响应不碰 db.sessionservices/ 不依赖 Flask 上下文如 request、current_app方便单元测试如果用 flask-sqlalchemymodels/ 中的 db 必须从 extensions.py 导入不能自己 SQLAlchemy()什么时候该拆 api/ 为多个蓝图不是按“用户管理”“订单管理”这种后台思维拆而是按「API 版本」或「调用方隔离」来拆。比如内部系统调用和对外 OpenAPI 需要不同鉴权、限流、日志粒度。 Ideogram Ideogram是一个全新的文本转图像AI绘画生成平台擅长于生成带有文本的图像如LOGO上的字母、数字等。