Flask项目目录怎么分_MVC架构在Flask应用中的常见目录树

Flask无内置MVC,推荐最小可行结构:app.pyconfig.pyextensions.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、ma(Marshmallow)、login_manager 等扩展实例单独提成 extensions.py,避免初始化顺序混乱models/ 下每个文件只定义一类模型(如 user.pypost.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-sqlalchemy,models/ 中的 db 必须从 extensions.py 导入,不能自己 SQLAlchemy()什么时候该拆 api/ 为多个蓝图?不是按"用户管理""订单管理"这种后台思维拆,而是按「API 版本」或「调用方隔离」来拆。比如内部系统调用和对外 OpenAPI 需要不同鉴权、限流、日志粒度。 Ideogram Ideogram是一个全新的文本转图像AI绘画生成平台,擅长于生成带有文本的图像,如LOGO上的字母、数字等。

相关推荐
Land032912 小时前
RPA工具选型技术指南:架构差异与实测数据
python·自动化·rpa
kafei_*12 小时前
VScode 添加 UV虚拟环境方法
vscode·python·uv
洛_尘13 小时前
Python 5:使用库
java·前端·python
m0_5967490913 小时前
如何防止SQL拼接漏洞_使用PDO对象实现安全的SQL交互
jvm·数据库·python
老纪的技术唠嗑局13 小时前
深度解析 LLM Wiki / Obsidian-Wiki / GBrain:Agent 时代知识的“自组织”与“自进化”
大数据·数据库·人工智能·算法
AIFQuant15 小时前
2026 全球股票/外汇/贵金属行情 API 深度对比:延迟、覆盖、价格与稳定性
python·websocket·ai·金融·mcp
Ray Liang15 小时前
吐血整理JSON-RPC2.0的原理与应用
python
㳺三才人子15 小时前
簡單的 語音助手
python·ai编程·pip
计算机毕业编程指导师16 小时前
【计算机毕设推荐】Python+Hadoop+Spark共享单车数据可视化分析系统 毕业设计 选题推荐 毕设选题 数据分析 机器学习 数据挖掘
大数据·hadoop·python·计算机·数据挖掘·spark·课程设计
2301_7950997416 小时前
golang如何在Gin中自定义验证器_golang Gin自定义验证器实现方法
jvm·数据库·python