蓝图定义:
简单来说:Blueprint是一个存储视图方法的容器,这些操作在这个Blueprint被注册到一个应用后就可以被调用,Flask可以通过Blueprint来组织URL以及处理请求
Flask使用Blueprint让应用实现模块化,在Flask中,Blueprint具有如下属性:
- 一个项目可以具有多个Blueprint
- 可以将一个Blueprint注册到任何一个未使用的url下比如“/”,“/sample"或者子域名
- 在一个应用中,一个模块可以注册多次
- Blueprint可以单独具有自己的模块,静态文件或者其他的通用操作方法,它并不是必须要实现应用的视图和函数的
- 在一个应用初始化时,就应该要注册Blueprint,但是一个Blueprint并不是一个完整的应用,它不能独立于应用运行,而必须要注册到某一个应用中。
Blueprint 对象用起来和一个应用/Flask对象差不多,最大的区别在于一个蓝图对象没有办法独立运行,必须将它注册到一个应用对象上才能生效
使用蓝图可以分为四个步骤:
- 创建一个蓝图包,例如home,并在__init__.py 文件中创建蓝图对象
from flask import Blueprint
home = Blueprint('home', __name__)
- 在这个蓝图目录下,创建views.py文件 保存当前蓝图使用的视图函数
def index():
return "ok"
- 在home/init.py中引入views,py中所有的视图函数和给视图配置路由
from flask import Blueprint:
home_blu = Blueprint('home', __name__)
from . import views
home_blu.add_url_rule("/index",endpoint="index", view_func = views,index) # 子路由
- 在主程序run.py文件中的app对象上注册这个home蓝图对象
# 注册蓝图
from home import home_blu
app.register_blueprint(home_blu, url=prefix='/home') # url_prefix='' 总路由
当这个应用启动后通过http://127.0.0.1:5000/home/index可以访问到蓝图中定义的视图函数
法一:
在一个flask总目录下建立一个名为home的pyhton 包
包含 init.py views.py main.py 三个文件
在 init_.py文件中
# 1.蓝图对象的初始化
from flask import Blueprint
home_blu = Blueprint("home", __name__) # 初始化一般 目录名_blue =Blueprint("(这个地方目录叫什么就写个什么名字进去", __name)
# 2.在蓝图目录下创建views.py视图文件,编写对应的视图函数/视图类
# 3.注册视图和路由到蓝图中
from . import views
# 在flask主文件main.py中通过app对象注册蓝图对象
在views.py文件中
from . import home_blu # 当前目录下把home_blu拿过来
@home_blu.route("/index") # 定义一个蓝对象
def index():
return "home/index"
在main.py文件中
from flask import Flask
app = Flask(__name__)
from home import home_blu
app.register_blueprint(home_blu, url_prefix="/") # url_prefix ='' 总路由 写了可以和@home_blu.route("/index") 这里拼接上,不写也没关系
if __name__ == '__main__':
app.run()
在浏览器中输入http://127.0.0.1:5000/index
显示:
法二:
在views.py中
注: 在这里前面不需要加
from . import home_blu
在views.py中
def index():
return "home/index 2"
在__init__.py中
# 1.蓝图对象的初始化
from flask import Blueprint
home_blu = Blueprint("home", __name__) # 初始化一般 目录名_blue =Blueprint("(这个地方目录叫什么就写个什么名字进去", __name)
# 2.在蓝图目录下创建views.py视图文件,编写对应的视图函数/视图类
# 3.注册视图和路由到蓝图中
from . import views
home_blu.add_url_rule("/index", view_func=views.index) # 这种方法通过views引入index就可以了
# 在flask主文件main.py中通过app对象注册蓝图对象
在main.py中
from flask import Flask
app = Flask(__name__)
from home import home_blu
app.register_blueprint(home_blu, url_prefix="/") # url_prefix ='' 总路由 写了可以和@home_blu.route("/index") 这里拼接上,不写也没关系
if __name__ == '__main__':
app.run()
浏览器输入http://127.0.0.1:5000/index 得到
在main.py 中url_prefix蓝图的路由前缀,类似之前的django的子应用路由前缀
app.register_blueprint(home_blu, url_prefix="/")
把上面那段代码改成
app.register_blueprint(home_blu, url_prefix="/home")
要输入 http://127.0.0.1:5000/home/index 才会有内容显示
输入之前的http://27.0.0.1:5000/index 浏览器页面显示Not Found