关于 flask 循环导入的问题?求解释,这个算不算循环导入? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Hopetree
V2EX    Flask

关于 flask 循环导入的问题?求解释,这个算不算循环导入?

  •  
  •   Hopetree
    Hopetree 2019-03-22 11:46:48 +08:00 3696 次点击
    这是一个创建于 2393 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看到一个 flask 项目,结构看的我非常喜欢,所以在学习。但是关于注册蓝图的操作我有点不理解,如下:

    项目结构(部分)

    --app --auth __init__.py views.py --run.py 

    然后我看到auth.__init__.py这样注册蓝图

    from flask import Blueprint auth = Blueprint('auth', __name__) from . import views 

    而在auth.views.py中又引用了 auth

    from . import auth @auth.route('/unconfirmed') def unconfirmed(): if current_user.is_anonymous or current_user.confirmed: return redirect(url_for('main.index')) return render_template('auth/unconfirmed.html') 

    我的理解是这两个文件里面在循环调用 auth 这个蓝图,这样做真的可以吗(当然运行没问题,我问的可以是这样的引用方式是否合理?)

    说说我的做法,我在 views 里面不会引用 auth,而是这是一个函数,传入 auth,然后__init__.py中引入这个函数来注册蓝图

    #__init__.py from flask import Blueprint from .views import init_blueprint bp = Blueprint('main', __name__) def init_app(app): init_blueprint(bp) app.register_blueprint(bp) #views.py from flask import jsonify, current_app def index(): return '' def init_blueprint(bp): bp.add_url_rule('/', 'home', index) 

    我这样做主要是避免循环引入,求解释上面的那个代码算不散循环导入?这 2 个方式最大的区别在于第一种可以使用装饰器,第二种只能使用 add_url_rule 去注册路由

    项目源码: https://github.com/miguelgrinberg/flasky/blob/master/app/auth/views.py

    2 条回复    2019-03-22 12:07:29 +08:00
    yemoluo
        1
    yemoluo  
       2019-03-22 12:06:32 +08:00
    当然是不会的啦,因为它们都是到文件级别的,而不是函数变量级别的,不需要即刻扫描

    Python 的 import 机制说复杂也复杂,说简单也简单。最重要的是理解: 在执行 import A 时,会先在 sys.modules 查找,如果找不到则会先创建一个 A 键,然后再填充 A 的具体东西
    fngtz
        2
    fngtz  
       2019-03-22 12:07:29 +08:00 via iPhone
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1097 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 19ms UTC 23:18 PVG 07:18 LAX 16:18 JFK 19:18
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86