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

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

目录结构:
Flask进阶篇(三)解决循环导包问题_第1张图片
说明:
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"

你可能感兴趣的:(python,flask,python)