关于 Flask-Login 的 user_loader 回调方法的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lonisletend
V2EX    Flask

关于 Flask-Login 的 user_loader 回调方法的问题

  •  
  •   lonisletend 2020-07-14 19:11:08 +08:00 5526 次点击
    这是一个创建于 1913 天前的主题,其中的信息可能已经有所发展或是发生改变。

    关于Flask-Loginuser_loader回调方法的问题

    前两天看到 lepture 关于 Flask 项目结构的这篇文章https://lepture.com/en/2018/structure-of-a-flask-project, 动手实践一下, 但是遇到个 Flask-Login 的问题, user_loader方法放在哪儿都不好使, 总是报Exception: Missing user_loader or request_loader. Refer to http://flask-login.readthedocs.io/#how-it-works for more info.

    我认为的是在项目启动之后login_manager已经和app关联了, 所以在 router 中引用的login_manager就可以设置user_loader回调方法了, 但是不管我把它放哪儿, 始终都找不到, 在引用current_user的时候就报错 Exception: Missing user_loader or request_loader. Refer to http://flask-login.readthedocs.io/#how-it-works for more info.

    下面是项目结构, 部分文件截图以及报错信息, 路过的大神麻烦帮忙看看是什么问题.

    • 项目结构

    • init.py

    • user.py (继承了flask_loginUserMixin类)

    • 报错信息

    麻烦大神们指教或者有什么思路说说, 先谢过.

    第 1 条附言    2020-07-15 14:25:46 +08:00
    问题解决了, 是因为在另外一个地方也初始化了 LoginManager

    ![]( https://i.loli.net/2020/07/15/nhiDwXrNgdkE8eR.png)

    是个人粗心大意了, 不关项目结构什么事儿.
    7 条回复    2020-07-14 20:09:57 +08:00
    ipwx
        1
    ipwx  
       2020-07-14 19:22:00 +08:00
    在 create_app 里面

    from . import auth

    虽然吧,我感觉你在 create_app() 里面再创建这个 app,多少有点反 flask pattern 。而且我看不出来这么做的好处。
    CallMeReznov
        2
    CallMeReznov  
       2020-07-14 19:25:47 +08:00
    from flask_login import LoginManager, current_user, login_user, login_required ,UserMixin ,login_user ,logout_user
    CallMeReznov
        3
    CallMeReznov  
       2020-07-14 19:27:21 +08:00
    我之前学习 FLASK 写 demo 的时候也都是胡写..反正我都引用进去就能用了,属实 Magic!
    lonisletend
        4
    lonisletend  
    OP
       2020-07-14 19:43:16 +08:00
    @ipwx 我的 auth 是在 routes 下的, 所以按你的意思我 from .routes import auth, 然而还是报错
    lonisletend
        5
    lonisletend  
    OP
       2020-07-14 19:51:20 +08:00
    @CallMeReznov 我也尝试了一通引用, 可是并不好使:(
    Flask 确实太灵活了, 以前我也是__init__.py 下 app=Flask(__name__) 然后到处 from app import, 这种写法在 Pycharm 里能被纠错烦死, 正好最近想写个新的项目了, 所以想理理 Flask 项目的结构, 按大神建议的试一试, 结果才学疏浅, 这不翻车了么:)
    renmu123
        6
    renmu123  
       2020-07-14 20:03:00 +08:00 via Android
    我才是 login_required 函数里获取不到 current_user
    lonisletend
        7
    lonisletend  
    OP
       2020-07-14 20:09:57 +08:00
    @renmu123 可以的, 我以前都这么写, 而且也试了直接在 /test 请求里用 current_user 也是一样的错误
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2825 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 13:35 PVG 21:35 LAX 06:35 JFK 09:35
    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