python3+flask 开发web(八)——flask中的蓝图

xiaoxiao2025-04-23  14

flask中的蓝图:

1)我们在一个文件中写入多个路由,这会使代码维护变得困难

from flask import Flask app = Flask(__name__) @app.route('/') def index(): return 'index' @app.route('/list') def list(): return 'list' @app.route('/detail') def detail(): return 'detail' @app.route('/') def admin_home(): return 'admin_home' @app.route('/new') def new(): return 'new' @app.route('/edit') def edit(): return 'edit' if __name__=='__main__': app.run()

2)尝试用模块导入的方式解决.我们把上述一个py文件的多个路由视图函数给拆成两个文件:app.py和admin.py文件。app.py文件作为程序启动文件,因为admin文件没有应用程序实例app,在admin文件中要使用app.route路由装饰器,需要把app.py文件的app导入到admin.py文件中。

app.py文件:

from flask import Flask # 导入admin中的内容 from admin import * app = Flask(__name__) @app.route('/') def index(): return 'index' @app.route('/list') def list(): return 'list' @app.route('/detail') def detail(): return 'detail' if __name__ == '__main__': app.run()

admin.py文件内容如下:

from app import app @app.route('/') def admin_home(): return 'admin_home' @app.route('/new') def new(): return 'new' @app.route('/edit') def edit(): return 'edit'

启动app.py文件后,我们发现admin.py文件中的路由都无法访问。 也就是说,python中的模块化虽然能把代码给拆分开,但不能解决路由映射的问题。访问127.0.0.1:5000/new或者edit的时候会报错

什么是蓝图:可以在Flask层上将一个Flask应用进行“分割”,实现模块化管理,这极大地简化了构建大型应用的流程,也使得应用的维护变得更加容易。另外,“蓝图”还提供了一种Flask扩展在应用上注册操作的核心方法。

蓝图的运行机制 蓝图是保存了一组将来可以在应用对象上执行的操作。注册路由就是一种操作,当在程序实例上调用route装饰器注册路由时,这个操作将修改对象的url_map路由映射列表。当我们在蓝图对象上调用route装饰器注册路由时,它只是在内部的一个延迟操作记录列表defered_functions中添加了一个项。当执行应用对象的 register_blueprint() 方法时,应用对象从蓝图对象的 defered_functions 列表中取出每一项,即调用应用对象的 add_url_rule() 方法,这将会修改程序实例的路由映射列表。

3)将上面的代码通过蓝图改造后:

app.py

from flask import Flask from admin import * app = Flask(__name__) app.register_blueprint(admin,url_prefix='/admin') @app.route('/') def index(): return 'index' @app.route('/list') def list(): return 'list' @app.route('/detail') def detail(): return 'detail'

admin.py

from flask import Blueprint admin =Blueprint('admin',__name__) @admin.route('/') def admin_home(): return 'admin_home' @admin.route('/new') def new(): return 'new' @admin.route('/edit') def edit(): return 'edit'

执行结果:

4)以模块的形式实现路由:

目录结构如下:

(1)新建两个python文件夹goods和orders

(2)goods文件夹下的__init__.py和views.py内容如下:

(3)orders文件夹下的__init__.py和views.py内容如下:

(4)manage.py中的内容如下:

from flask import Flask from orders import orders_blue from goods import goods_blue app=Flask(__name__) #将蓝图注册到app app.register_blueprint(orders_blue) app.register_blueprint(goods_blue) @app.route('/') def index(): return 'index' if __name__=='__main__': print(app.url_map) #打印app的路由 app.run()

执行结果:

控制台输出:

url中的显示 

参考博文:https://blog.csdn.net/Enjolras_fuu/article/details/79933756

转载请注明原文地址: https://www.6miu.com/read-5028976.html

最新回复(0)