Flask 原生路由与 Blueprint 蓝图在大型项目中的区别主要体现在架构扩展性与维护成本上。原生路由将所有视图集中写在单一文件,适合小型应用,但随功能增多会导致代码臃肿、难以协作。Blueprint 蓝图则提供模块化机制,允许将路由、视图、模板按功能拆分到独立组件,每个蓝图拥有独立命名空间和 URL 前缀。这种结构不仅提升代码可读性,还支持并行开发与插件化集成,是构建可扩展大型 Web 应用的关键设计模式,有效避免了单文件维护的混乱。
告别混乱路由结构,Flask 蓝图设计模式 (大型项目必备)
第一章:告别混乱路由结构——Flask 蓝图的核心价值 在构建中大型 Flask 应用时,随着功能模块的增多,将所有路由和视图集中写在单一文件中会导致代码臃肿、维护困难。Flask 蓝图 (Blueprint) 正是为解决这一问题而生,它提供了一种组织和模块化应用逻辑的强大机制。模块化开发的优势 使用蓝图可以将不同的功能模块 (如用户管理、文章发布、后台系统) 拆分到独立的组件中,每个组件拥有自己的路由、模板和静态文件。这种结构不仅提升了代码可读性,也便于团队协作与后期维护。创建并注册蓝图 以下是一个用户模块蓝图的定义示例:# users/blueprint.py fromflaskimportBlueprint # 创建名为 'users' 的蓝图实例 users_bp = Blueprint('users', __name__, url_prefix='/users') @users_bp.route('/login', methods=['GET','POST']) deflogin(): return"用户登录页面"AI 写代码 在主应用中注册该蓝图:# app.py fromflaskimportFlask fromusers.blueprintimportusers_bp app = Flask(__name__) app.register_blueprint(users_bp)# 注册蓝图 if__name__ =='__main__': app.run(debug=True)AI 写代码 此时访问/users/login 即可触发对应视图函数。蓝图带来的结构优化 通过使用蓝图,项目结构变得更加清晰:按功能划分目录,例如 auth/、admin/、blog/ 每个模块内部自包含路由、表单、模板等资源 主应用文件仅负责初始化和蓝图注册,职责明确
| 传统结构 | 蓝图结构 |
|---|---|
| 所有路由集中在 app.py | 路由分散于各蓝图模块 |
| 难以团队协作 | 支持并行开发 |
| 扩展性差 | 易于插件化集成 |
Python Web 应用开发之 Flask 框架高级应用 (三)——蓝图 (Blueprints)
一、Flask 蓝图初相识 在 Python 的 Web 开发领域中,Flask 框架凭借其轻量级、灵活性和强大的扩展性,深受开发者们的喜爱。当我们的 Flask 应用逐渐庞大,功能日益复杂时,如何有效地组织代码,使其结构清晰、易于维护,就成为了一个关键问题。而蓝图 (Blueprints),正是 Flask 为我们提供的强大解决方案,它在大型项目开发中扮演着举足轻重的角色。蓝图就像是一个规划图,它能够将一个大型的 Flask 应用拆分成多个小型的、可独立管理的模块。每个模块可以包含自己的路由、视图函数、模板和静态文件等,使得代码的组织结构更加清晰,开发和维护的效率大幅提高。例如,在一个电商应用中,我们可以将用户管理、商品管理、订单管理等功能分别放在不同的蓝图中,每个蓝图负责自己的业务逻辑,相互之间互不干扰。这样,当我们需要修改或扩展某个功能时,只需要关注对应的蓝图,而不会影响到整个应用的其他部分。(发布时间是 2025 年 7 月 8 日)
测试之路 python-flask 框架:路由和蓝图
01.路由 路由在很多开发框架中是一个很重要的概念。它就好比门牌号一样,可以通过路径,精确定位到某个方法。在 python 中。路由是通过装饰器来表现这种形式的。它能够准确的将浏览器发出的请求,发送给指定方法。下面用一个小示例,说明下路由的绑定与浏览器访问。新建一个 flask 项目。导入 flask 包,然后实例化 flask 对象。创建一个方法,并在方法上面使用@app.route("/路由路径") 装饰器绑定路由。注意:视图函数中的所有方法。都需要 return 一个结果。完成上面的步骤后,可以在命令行输入 python app.py 的命令运行该程序。这里需要注意,使用命令行,首先要进到当前项目的根目录,或者键入项目的绝对路径。如下图所示结果图。我们可以使用程序返回的链接访问,也可以在浏览器输入后访问。说明:在 app.run 中,可以指定运行地址以及端口号,如果为空,则默认为 127.0.0.1:5000。如果为 0.0.0.0 则允许用户通过 ip 地址访问本机,也就是外网也可以访问。(后续部署到服务器时,会用到这个方法) 以上就是路由的绑定,与访问。是不是很简单?大家可以动手试试哈。如果访问中出现 not found 这种情况的话,不要慌,先看看路由路径是否正确。我在刚接触 flask 的时候,总忘记浏览器地址栏中输入路由地址。02.蓝图 在上面的示例中,我们可以看到视图函数写入到了 app 的运行文件中。一个项目中有成百上千个这样的函数。如果全部放在这一个模块中。在维护的时候,就需要在上千行上万行代码中去寻找 bug。蓝图就可以解决这个问题。蓝图,就是将视图函数与其他代码进行组装的一种方式。可以将视图函数与其他配置文件进行分离。分离 app 模块 (以下步骤比较绕。可以跟着小王一起敲)。首先新建一个 apps 的包,然后在初始化文件中定义一个创建 app 的方法。并返回 app。而后在 apps 的层级下创建一个 view 包并创建一个 view 模块。专门用来存放某一类的视图函数。比如下图的 user_view 包主要是用来处理用户相关信息的。接下来就是进入 view 函数中进行蓝图绑定与注册。实例化 app 文件 进入 app.py 文件中。删除原有的代码。调用 apps 中的 creat_app 方法实例 app 对象 至此。蓝图的绑定就成功了。从上述步骤来说,分离了视图函数,分离了 app 的运行配置文件。虽然步骤看起来麻烦点,但是从代码维护的角度上来看,这样更方便项目的维护以及问题的定位。(2024 年 11 月 23 日的资料)
FAQ
Flask 蓝图主要解决什么问题?
解决大型项目中代码臃肿、维护困难的问题,实现模块化开发,将路由和视图按功能拆分。
蓝图是否可以直接运行?
蓝图不能独立运行,必须通过 register_blueprint 方法注册到主 Flask 应用实例中才能生效。
如何区分普通路由和蓝图路由?
普通路由使用@app.route 装饰器直接绑定到 app 实例,蓝图路由使用@blueprint.route 且需先创建蓝图对象。