Closed Sakakibara-Hu closed 6 years ago
终于看懂了,之前是我啥都没看懂- -逻辑都没理清楚,没有表这个问题就不说了,主要是数据库里存的邮箱哈希值没更新的问题: 因为改的时候只需要改昵称和邮箱,所以在forms.py里面就只提交了这两项以及一个确认密码
class EditUserInfoForm(Form):
username = StringField(u'昵称', validators=[DataRequired()])
email = StringField(u'电子邮件', validators=[DataRequired(), Length(1, 64), Email()])
password = PasswordField(u'密码确认', validators=[DataRequired()])
这就导致在views.py里更新数据库时只更新了用户名和邮箱
current_user.username = form2.username.data
current_user.email = form2.email.data
db.session.add(current_user)
db.session.commit()
最后的最后,因为数据库的邮箱不为空且邮箱哈希值为旧值也不为空,就使得下次登陆时并不会重新计算哈希值而是直接沿用过去的
def __init__(self, **kwargs):
super(User, self).__init__(**kwargs)
if self.email is not None and self.avatar_hash is None:
self.avatar_hash = hashlib.md5(
self.email.encode('utf-8')).hexdigest()
起因是更改头像链接后能显示头像了,结果下午我再运行发现评论区的头像是我自己邮箱的,右上角管理员那里却是原来默认账户blog_mini的头像,并且进管理博客界面的大头像也是原来默认的没变; 看了半天觉得是加载头像那里的
使用了数据库默认的hash值,并且当我把前面的
self.avatar_hash or
去掉后就显示正确了