蓝图
在Flask中,使用蓝图Blueprint来分模块组织管理。
蓝图:用于实现单个应用的视图、模板、静态文件的集合。
蓝图就是模块化处理的类。
简单来说,蓝图就是一个存储操作路由映射方法的容器,主要用来实现客户端请求和URL相互关联的功能。 在Flask中,使用蓝图可以帮助我们实现模块化应用的功能。
- 单文件的
蓝图
# main.py的文件
from flask import Flask
from users import user
app = Flask(__name__)
# 注册蓝图
# url_prefix参数默认值是根路由,如果指定,会在蓝图注册的路由url中添加前缀。
app.register_blueprint(user, url_prefix="/user")
@app.route("/", methods=["GET"])
def index():
return "首页"
if __name__ == '__main__':
print(app.url_map)
app.run()
# users.py的文件
from flask import Blueprint
# 创建蓝图对象
user = Blueprint("user", __name__)
@user.route('/user_name')
def user_name():
return "用户"
运行main.py 的文件结果
- 目录(包)下的蓝图
--------- project # 工程目录
|------main.py
# 启动文件
|------goods
# 商品包目录 即商品蓝图
| |—__init__.py
# 此处创建蓝图对象
| |—views.py
| |— …
# main.py 文件
from flask import Flask
from users import user
import goods
app = Flask(__name__)
# 注册蓝图
# url_prefix参数默认值是根路由,如果指定,会在蓝图注册的路由url中添加前缀。
# app.register_blueprint(user, url_prefix="/user")
app.register_blueprint(goods.app_goods, url_prefix="/goods")
@app.route("/", methods=["GET"])
def index():
return "首页"
if __name__ == '__main__':
print(app.url_map)
app.run()
# goods包下的__init__.py文件
from flask import Blueprint
# 创建蓝图对象
# app_goods 为蓝图名字,可以任意指定,一般与变量名一致
app_goods = Blueprint("app_goods", __name__)
# 注意要在 app_goods 后导入
# app_goods 前导入,在初始化操作时,导入views时,
# 蓝图对象还没有创建,就以蓝图对象作装饰器装饰视图函数,所以会出错
from . import views
# goods包下的views.py文件
from . import app_goods
@app_goods.route("/goods")
def goods():
return "商品模块"
运行main.py 的文件结果
- 蓝图内部静态文件
蓝图对象创建时不会默认注册静态目录的路由。需要我们在 创建时指定static_folder
、static_url_path
、template_folder
等参数。
app_goods = Blueprint("app_goods", __name__, static_folder="static", template_folder="templates")
注意:蓝图内部的静态文件目录中的静态文件,如果主目录中也存在,就以主目录为准,原因:父目录大于子目录。