Flask进阶篇(三)解决循环导包问题

本文详细介绍了在使用Flask框架时如何避免循环导入错误,提供了多种解决方案,包括使用装饰器传参、蓝图模板和层次感导入方法,帮助开发者优化项目结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景: 在使用Flask轻量级框架的时候会遇到循环导包的错误,就是主程序中导入了某个模块的某个视图等,视图这边有导入主程序的app等造成的循环导入无法跳出来,针对这个问题我下面提供了解决方案供参考。

目录结构:
在这里插入图片描述
说明:
1.当导入cart包时就会自动执行初始化文件,可以把包理解为一个类,在实例化的时候一定会执行__init__函数。
2.模板文件和静态文件的查找顺序:根目录下面的templates先查找如果没有再去cart下的templates中查找。

主程序代码:

from flask import Flask
from templates.test import index
from cart import cart


app = Flask(__name__)

"""方案一:装饰器传参的方式"""
# 有效避开循环导入,先导入后装饰
app.route("/index")(index)

"""方案二:蓝图模板"""
"""在主程序中实现"""
# 创建蓝图对象      蓝图名称       蓝图所在的模块,寻找静态模板等
admin = Blueprint("admin_view", __name__)
# 注册蓝图路由
@admin.route("/")
def admin_index():
    return "this is admin index"
# 在程序实例中注册该蓝图   蓝图对象   蓝图前缀
app.register_blueprint(admin, url_prefix="/admin")

"""层次感(推荐)"""
# 改为django框架里类似的导入方式
app.register_blueprint(cart, url_prefix="/cart")


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

补充: 当然可以执行主程序的时候想不导入其他的模块,当要用到的时候再去导入也可以解决。

init.py里的代码:

from flask import Blueprint


cart = Blueprint("cart_order", __name__)
from .view import cat_index

view里的代码:

from . import cart  # .指的是当前目录下


@cart.route("/")
def cat_index():
    return "this is cart index"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值