Flask框架中蓝图的使用

Flask框架中蓝图的使用

1.基本使用

  • 蓝图的作用: 实现Flask项目 模块化
  • 项目模块化主要是 将业务以功能模块进行划分, 每个功能模块对应一个包, 用于存放和其有关的视图/工具/模型文件等, 如home, user
  • 对于大型项目, 一般 每个功能模块对应创建一个蓝图, 由多个蓝图代替应用来分别管理各模块的视图
--------- project # 工程目录
  |------ main.py # 启动文件
  |------ user  # 用户模块
  |  |--- __init__.py  # 包的初始化文件, 此处创建管理用户模块的蓝图对象
  |  |--- views.py  # 视图文件
  |  |--- ...
  |
  |------ home # 首页模块
  |  |--- __init__.py  # 包的初始化文件, 此处创建管理首页模块的蓝图对象
  |  |--- views.py  # 视图文件
  |  |--- ...
  |...

代码示例:

  • 在 home包 的初始化文件 init.py 中, 创建蓝图对象
# home/__init__.py

from flask import Blueprint

# 1. 创建蓝图对象
home_blu = Blueprint("home_b", __name__)
  • 在 home包中创建 views文件, 存放视图函数
  • 定义视图函数时, 使用蓝图对象来定义路由
# home/views.py

from home import home_blu

# 2. 使用蓝图对象来定义路由
@home_blu.route('/')
def index():

    return "index"

想要让蓝图对象能够完成路由定义, 还需要 Flask应用注册蓝图对象

# main.py

from flask import Flask
from home import home_blu

app = Flask(__name__)

# 3.应用注册蓝图对象
app.register_blueprint(home_blu)


if __name__ == '__main__':
    print(app.url_map)
    app.run(debug=True)

视图文件目前是独立的, 还需要 包的初始化文件导入视图文件, 让视图文件和主程序建立关联

# home/__init__.py

from flask import Blueprint

# 1. 创建蓝图对象
home_blu = Blueprint("home_b", __name__)

# 4. 让视图文件和主程序建立关联
# 遇到ImportError, 需要查看和调整代码的执行顺序
from . import views

2.使用细节
蓝图的三个使用细节

  • 创建蓝图时, 可以通过 url_prefix参数 给蓝图定义的路由添加 统一的URL资源段前缀
  • 蓝图定义的路由, 其函数标记为 蓝图名.函数名
  • 蓝图也可以 设置请求钩子
    • 只有访问该蓝图定义的路由时才会触发
    • 实现局部监听

示例代码

# home/__init__.py

from flask import Blueprint

# 细节1: 可以通过url_prefix参数给蓝图定义的路由添加统一的URL资源段前缀
home_blu = Blueprint("home_b", __name__, url_prefix='/home')


# 细节3: 蓝图也可以设置请求钩子 只有访问该蓝图定义的路由时才会触发 局部监听
@home_blu.before_request
def home_prepare():
    print('home_prepare')

from . import views
# home/views.py

from flask import url_for
from home import home_blu

@home_blu.route('/')
def index():

    return "index"


@home_blu.route('/demo1')
def demo1():
    # 细节2: 蓝图定义的路由, 其函数标记为 蓝图名.函数名
    url1 = url_for('home_b.demo1')
    # print(url1)
    return 'demo1'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值