xpleaf / Blog_mini

An Open Source Blog System that developed with Flask.
Other
983 stars 471 forks source link

为什么数据库里blog_mini没有表呢?(show tables显示没有) #20

Closed Sakakibara-Hu closed 6 years ago

Sakakibara-Hu commented 6 years ago
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| blog_mini          |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> use blog_mini;
Database changed
mysql> show tables;
Empty set (0.00 sec)

起因是更改头像链接后能显示头像了,结果下午我再运行发现评论区的头像是我自己邮箱的,右上角管理员那里却是原来默认账户blog_mini的头像,并且进管理博客界面的大头像也是原来默认的没变; 看了半天觉得是加载头像那里的

hash = self.avatar_hash or hashlib.md5(
            self.email.encode('utf-8')).hexdigest()

使用了数据库默认的hash值,并且当我把前面的self.avatar_hash or去掉后就显示正确了

Sakakibara-Hu commented 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()