Flask 蓝图的基本使用
发布时间:2023-06-30 14:19:15 所属栏目:教程 来源:
导读:在前面的例子中,所有的页面处理逻辑都是放在同一个文件中,随着业务代码的增加,将所有代码都放在单个程序文件中是非常不合适的。不仅会让阅读代码变得困难,而且会给后期维护带来麻烦。
Flask 中使用蓝图,提供
Flask 中使用蓝图,提供
在前面的例子中,所有的页面处理逻辑都是放在同一个文件中,随着业务代码的增加,将所有代码都放在单个程序文件中是非常不合适的。不仅会让阅读代码变得困难,而且会给后期维护带来麻烦。 Flask 中使用蓝图,提供了模块化管理程序路由的功能,使程序结构更加清晰。 1. 蓝图简介 随着 Flask 程序越来越复杂,需要对程序进行模块化的处理,蓝图 (Blueprint) 是 Flask 程序的模块化处理机制,它是一个存储视图方法的集合,Flask 程序通过 Blueprint 来组织 URL 以及处理请求。 Flask 的 Blueprint 具有如下属性: 一个项目可以具有多个 Blueprint; Blueprint 可以单独具有自己的模板、静态文件的目录; 在应用初始化时,注册需要使用的 Blueprint。 2. 基本用法 2.1 功能概述 本节通过一个具体的例子讲解 Blueprint 的基本用法,假设网站包含有如下 4 个页面: 页面 功能 处理函数 /news/society/ 社会新闻版块 society_news /news/tech/ IT 新闻版块 tech_news /products/car/ 汽车产品版块 car_products /products/baby/ 婴幼儿产品版块 baby_products 程序将 /news/society/ 和 /news/tech/ 的相关功能组成一个蓝图 news;程序将 /products/car/ 和 /products/baby/ 的相关功能组成一个蓝图 products。 假设访问的页面路径是 /products/car,Flask 框架在蓝图 news 和蓝图 products 中查找匹配该页面路径的路由,发现在蓝图 products 中,存在和路径 /products/car 相应的处理函数 car_products,最后将请求转发给函数 car_products 处理。 例子程序包括 2 个蓝图,由 3 个文件构成: app.py,程序的主文件; news.py,实现蓝图 news; products.py,实现蓝图 products。 2.2 主程序 app.py 首先编写主程序 app.py: from flask import Flask import news import products app = Flask(__name__) app.register_blueprint(news.blueprint) app.register_blueprint(products.blueprint) app.run(debug = True) 在第 2 行,导入模块 news.py,在 news.py 中定义了一个蓝图对象 news.blueprint;在第 3 行,导入模块 products.py,在 products.py 中定义了一个蓝图对象 products.blueprint。 在第 7 行,在应用中注册蓝图对象 news.blueprint;在第 8 行,在应用中注册蓝图对象 products.blueprint。 2.3 蓝图 news.py 编写 news.py,实现页面 /news/society 和 /news/tech 的功能: from flask import Blueprint blueprint = Blueprint('news', __name__, url_prefix='/news') @blueprint.route("/society/") def society_news(): return "社会新闻版块" @blueprint.route("/tech/") def tech_news(): return "IT 新闻板块" 在第 3 行,创建一个蓝图对象,它包含 3 个参数: 第 1 个参数 ‘news’ 是蓝图的名称; 第 2 个参数 __name__ 是该蓝图所在的模块名,该蓝图的实现文件是 news.py,因此 __name__ 是 ‘news’; 第 3 个参数是指定页面的 URL 前缀为 ‘/news’,它会影响路由中路径的设置,请看下一段的注意。 在第 5 行,将路径 /society/ 和函数 society_news 关联;在第 9 行,将路径 /tech/ 和函数 tech_news 关联。注意:页面的绝对路径是 /news/society/ 和 /news/tech/,因为蓝图的 url_prefix 设置为 news,在蓝图内部,页面的相对路径是 /society/ 和 /tech/。 2.4 蓝图 products.py 编写 products.py,实现页面 /products/car 和 /products/baby 的功能: from flask import Blueprint blueprint = Blueprint('products', __name__, url_prefix='/products') @blueprint.route("/car") def car_products(): return "汽车产品版块" @blueprint.route("/baby") def baby_products(): return "婴儿产品版块" 在第 3 行,创建一个名为 ‘products’ 的蓝图,该蓝图中页面的 URL 前缀为 /products;在第 5 行,将路径 /car/ 和函数 car_products 关联;在第 9 行,将路径 /baby/ 和函数 baby_products 关联。 注意:页面的绝对路径是 /products/car/ 和 /product/baby/,因为蓝图的 url_prefix 等于 products,在蓝图内部,页面的相对路径是 /car/ 和 /baby/。 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |