flask-restful项目集成flask-mail时出现循环导入问题该如何解决?
Flask项目flask-restful循环导入问题解决方案
以下两种方案均不需要放弃flask-restful模块:
方案1:拆分扩展实例到独立文件(推荐,适合中大型项目)
核心逻辑是把全局扩展实例和app实例拆分到不同文件,避免双向导入:
- 新建
extensions.py文件,声明无需绑定app的扩展实例:
# extensions.py from flask_restful import Api from flask_mail import Mail api = Api() mail = Mail()
- 修改
app.py代码,延迟导入资源类,先完成扩展和app的绑定:
# app.py file from flask import Flask from extensions import api, mail app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = '' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.config.from_pyfile('core/config.py') # 绑定扩展到当前app实例 mail.init_app(app) api.init_app(app) # 扩展绑定完成后再导入资源类,避免循环 from account import Register api.add_resource(Register, '/register') if __name__ == '__main__': app.run(debug=True)
- 修改
account.py的导入路径,从扩展文件导入mail实例:
# account.py from flask_restful import Resource from extensions import mail class Register(Resource): def post(self): # 初始化邮件msg及其他业务逻辑 mail.send(msg)
方案2:局部延迟导入(适合小型项目快速修复)
不需要新增文件,仅调整account.py的导入位置,把mail的导入放到方法内部执行:
# account.py from flask_restful import Resource class Register(Resource): def post(self): # 方法内导入不会触发顶层模块的循环依赖 from app import mail # 初始化邮件msg及其他业务逻辑 mail.send(msg)
内容的提问来源于stack exchange,提问作者joseleii
相关产品推荐
相关产品推荐

