greyli / helloflask

Hello, Flask!
https://docs.helloflask.com
MIT License
1.87k stars 2.53k forks source link

关于登录的一个报错 #90

Closed BobcatsII closed 5 years ago

BobcatsII commented 6 years ago

问题描述: 登录视图函数代码如下:


@auth_bp.route('/login', methods=['GET', 'POST']) def login(): if current_user.is_authenticated: return redirect(url_for('main.index')) form = LoginForm() if form.validate_on_submit(): user = User.query.filter_by(email=form.email.data.lower()).first() if user is not None and user.validate_password(form.password.data): if login_user(user, form.remember_me.data): flash('登录成功.', 'info') return redirect_back() else: flash('你的账户已被屏蔽.', 'warning') return redirect(url_for('main.index')) flash('无效的邮箱或密码.', 'warning') return render_template('auth/login.html', form=form)


点击登录后报错如下: AttributeError: 'User' object has no attribute 'get_id'

############################################################# 经排查发现2点问题: 1.User.query.filter_by(email=form.email.data)的输出: SELECT user.id AS user_id, user.username AS user_username, user.email AS user_email, user.password_hash AS user_password_hash, user.member_since AS user_member_since, u ser.avatar_s AS user_avatar_s, user.avatar_m AS user_avatar_m, user.avatar_l AS user_avatar_l, user.avatar_raw AS user_avatar_raw, user.confirmed AS user_confirmed, use r.locked AS user_locked, user.active AS user_active, user.role_id AS user_role_id FROM user WHERE user.email = %(email_1)s 我观察您在albumy里面这行的输出最后是"WHERE user.email = ?",查不明白为什么我的输出是“WHERE user.email = %(email_1)s” ?

  1. 经排查程序走到这句代码 if login_user(user, form.remember_me.data): 走不下去了,报上面的那个AttributeError错误,感觉应该还是上面传入值有问题阿导致的,但是找不到头绪了o(╥﹏╥)o。

####################################################### 查了一天都没有解决这个问题,麻烦您百忙之中抽出一点时间帮看一下代码, 下面是我的地址:https://github.com/BobcatsII/Opps.git 您可以实验一下,用的是mysql作为数据库,所以在虚拟环境里安装了PyMySQL(因为是python3), 自己依葫芦画瓢都画不全,还望您多批评、指正,感谢!

greyli commented 6 years ago

@BobcatsII 这个是 User 模型类没有继承 Flask-Login 提供的 UserMixin 类导致的。你的 models.py 里导入了那个类,但没用。

greyli commented 6 years ago

具体来说,就是把这一行,改成这样:

class User(db.Model, UserMixin):
BobcatsII commented 5 years ago

抱歉,昨晚回去上课了没有看github,今天工作上事情特别多,刚刚才把事情忙完,@_@~真的抱歉! 刚刚试了一下代码,确实如此,对比了一下您项目里的代码,我确实是漏了UserMixin这个类,真是太马虎了。 总结一下: 1) 得改一下自己再vim里面编辑的方式了,还是要用pycharm来编辑,以后没有生效的类能及时发现; 2) 对这个类的用法还没有明白,重新学习一下,这次的过程记录在案; 3) 暴露自己只临摹了形,没有领会其意,还是要踏实一点。 最后,感谢您的指导,谢谢~

greyli commented 5 years ago

嗯,没事。不客气 :)