第六章 Flask——蓝图(BluePrint)对象
一、初识蓝图(BluePrint)
二、蓝图(BluePrint)详解
一、初识蓝图(BluePrint)
什么是蓝图(what):
蓝图就是另一种形式(不可以被执行的)的Flask实例,它的作用就是将功能与主服务分开。
为什么使用蓝图(why):
比如说,你有一个客户管理系统,最开始的时候,只有一个查看客户列表的功能,后来你又加入了一个添加客户的功能(add_user)模块, 然后又加入了一个删除客户的功能(del_user)模块,然后又加入了一个修改客户的功能(up_user)模块,在这个系统中,就可以将查看客户,修改客户,添加客户,删除客户的四个功能做成蓝图加入到客户管理系统中。
如何使用蓝图(how):
1.创建一个项目然后将目录结构做成
2.创建一个蓝图文件detail.py
from flask import Blueprint # 导入 Flask 中的蓝图 Blueprint 模块 detail_blueprint = Blueprint("serv",__name__) # 实例化一个蓝图(Blueprint)对象 @detail_blueprint.route("/add_user",methods=["POST","GET"]) # 这里添加路由和视图函数的时候与在Flask对象中添加是一样的 def add_user(): return "添加用户"
3.在flask_app.py里注册蓝图文件
from flask import Flask,render_template from serv import detail # 导入此前写好的蓝图模块 app = Flask(__name__,template_folder="templates") app.debug = True app.register_blueprint(detail.detail_blueprint) # 在Flask对象中注册蓝图模块中的蓝图对象 @app.route("/info", methods=["GET", "POST"]) def student_info(request): stu_id = int(request.args["id"]) return f"Hello {stu_id}" # Python3.6的新特性 f"{变量名}" if __name__ == '__main__': app.run() # 现在Flask对象中并没有写任何的路由和视图函数
开启服务,然后访问 http://127.0.0.1:5000/add_user 查看结果
二、蓝图(BluePrint)详解
其实我们可以理解成一个没有run方法的Flask对象,这个理论虽然有很多的漏洞,但是对于刚接触蓝图的你来说,就这么样理解,没有错
下面来看一下,在实例化蓝图的时候可以传递的参数都有什么,你就能完全理解了。
flask的蓝图就好像django的app
主视图flask_app.py
from flask import Flask,render_template from serv import detail # 导入此前写好的蓝图模块 app = Flask(__name__) app.debug = True app.register_blueprint(detail.detail_blueprint) # 在Flask对象中注册蓝图模块中的蓝图对象 @app.route("/info", methods=["GET", "POST"]) def student_info(request): stu_id = int(request.args["id"]) return f"Hello {stu_id}" # Python3.6的新特性 f"{变量名}" if __name__ == '__main__': app.run() # 现在Flask对象中并没有写任何的路由和视图函数
蓝图detail.py
from flask import Blueprint,render_template # 导入 Flask 中的蓝图 Blueprint 模块 detail_blueprint = Blueprint("serv",__name__, template_folder="serv_temp", static_folder="serv_static", static_url_path="/serv_static" ) # 实例化一个蓝图(Blueprint)对象 @detail_blueprint.route("/add_user",methods=["POST","GET"]) # 这里添加路由和视图函数的时候与在Flask对象中添加是一样的 def add_user(): return render_template("add_user.html")
add_user.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>添加用户</title> </head> <body> <h1>add_user</h1> <img src="/serv_static/timg.jpg"> </body> </html>
效果如下
从这个例子中我们总结出:
Blueprint 其实可以理解为一个了没有run方法的 Flask 对象
只要Blueprint被 Flask 注册了,就一定会生效
!!!切记:蓝图内部的视图函数及route不要出现重复,!!!