flask web框架学习(八、蓝图)

蓝图

在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_folderstatic_url_pathtemplate_folder等参数。
app_goods = Blueprint("app_goods", __name__, static_folder="static", template_folder="templates")

注意:蓝图内部的静态文件目录中的静态文件,如果主目录中也存在,就以主目录为准,原因:父目录大于子目录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值