第九篇 蓝图 blueprint
在Flask中的蓝图 blueprint 的作用就是将 功能 与 主服务 分开
比如说,你有一个客户管理系统,最开始的时候,只有一个查看客户列表的功能,后来你又加入了一个添加客户的功能(add_user)模块, 然后又加入了一个删除客户的功能(del_user)模块,然后又加入了一个修改客户的功能(up_user)模块,在这个系统中,就可以将
查看客户,修改客户,添加客户,删除客户 四个功能做成蓝图加入到客户管理系统中
初识蓝图
如何理解蓝图:其实我们可以理解成一个没有run方法和config配置的的Flask对象,这个理论虽然有很多的漏洞,但是对于刚接触蓝图来说,就这么样理解,没有错
1.在上一篇原基础上传建一个文件夹user_app项目, 文件夹结构如下
user_app中写入
from flask import Blueprint # 导入 Flask 中的蓝图 Blueprint 模块 from flask import render_template user_blue = Blueprint("user", __name__, template_folder="user_temp", url_prefix="/user") # 实例化一个蓝图(Blueprint)对象 # 模板文件放在user_temp文件夹下, url访问时候较多加一个前缀/user @user_blue.route('/user_list') # url访问 /user/user_list def user_list(): return render_template("user_list.html")
app.py文件中注册一下
from users_app import user app.register_blueprint(user.user_blue) # 注册蓝图
user_lsit.html 中就写入了一个h1标签
<h1>这里是user_list页面</h1>
此时访问浏览器 路由是 /user/user_lsit
很明显,我们没有在Flask对象中添加路由,但是我们注册了有路由和视图函数的user_blue蓝图对象
总结
Blueprint 其实可以理解为一个了没有run方法的 Flask 对象
只要Blueprint被 Flask 注册了,就一定会生效
2.修改user.py,并在user_app目录下添加一张图片
from flask import Blueprint # 导入 Flask 中的蓝图 Blueprint 模块 from flask import render_template, send_file user_blue = Blueprint("user", __name__, template_folder="user_temp", url_prefix="/user") # 实例化一个蓝图(Blueprint)对象 # 模板文件放在user_temp文件夹下, url访问时候较多加一个前缀/user @user_blue.route('/user_list') # url访问 /user/user_list def user_list(): return render_template("user_list.html") @user_blue.route('/picture') # /user/picture def picture(): return send_file("users_app\\111.jpg") # 图片路径
url中访问 /user/picture
从这个例子中我们总结出:
Blueprint 其实可以理解为一个了没有run方法的 Flask 对象
只要Blueprint被 Flask 注册了,就一定会生效
坑来了!坑来了!
蓝图内部的视图函数及route不要出现重复,否则~你们自己试试吧
蓝图简单应用