在Python程序中运行Flask Blueprint时报AttributeError如何解决?
报错原因
Flask 中的 Blueprint 本质是用于模块化管理路由的容器组件,本身没有提供启动Web服务的run()方法,该方法仅属于Flask核心应用实例对象,直接调用Blueprint对象的run方法自然会抛出属性不存在的异常。
解决方法
你需要创建Flask核心应用实例,将编写的Blueprint注册到该实例后,调用核心实例的run()方法启动服务,完整可运行的参考代码如下:
from flask import Flask, Blueprint, render_template from flask_login import LoginManager, UserMixin, login_required, current_user # 原有Blueprint定义逻辑 main = Blueprint('main', __name__) @main.route('/') def index(): return render_template('index.html') @main.route('/profile') @login_required def profile(): return render_template('profile.html', name=current_user.name) # 新增Flask核心实例初始化逻辑 app = Flask(__name__) # 配置flask-login必要参数 app.config['SECRET_KEY'] = '自定义加密密钥,生产环境请替换为随机复杂字符串' login_manager = LoginManager() login_manager.init_app(app) # 实现flask-login要求的用户加载回调 @login_manager.user_loader def load_user(user_id): # 此处替换为你的实际用户查询逻辑,示例为模拟用户对象 class DemoUser(UserMixin): id = 1 name = "演示用户" return DemoUser() if user_id == "1" else None # 注册Blueprint到核心应用 app.register_blueprint(main) if __name__ == "__main__": # 调用核心应用的run方法启动服务 app.run(debug=True)
- 如果你的项目是多文件结构,也可以将Blueprint单独拆分到独立的模块文件,在入口文件导入后注册到核心应用实例即可,Blueprint的设计目的就是拆分不同业务模块的路由,支持多人协作开发时各自维护不同业务模块的路由逻辑。
内容的提问来源于stack exchange,提问作者fizz
相关产品推荐
相关产品推荐

