7.(后端)数据模型的完善

1.对密码数据的保存加密

1.1原因

若数据库被暴露,或者泄露,很容易把用户的密码暴露出来,造成更大损失。

1.2使用加密方法和解密方法保护密码

# /flask_shop/models.py
# 此文件用于建立数据库表的模型

# 需要针对数据库的模型
from flask_shop import db
# 对数据加密         检查密码
from werkzeug.security import generate_password_hash,check_password_hash

# 需要继承数据库中的模型
class User(db.Model):
    __tablename__ = 't_user'
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(32), unique=True, nullable=False)
    pwd = db.Column(db.String(128))
    nick_name = db.Column(db.String(32))
    phone = db.Column(db.String(11))
    email = db.Column(db.String(32))


    # 对数据库的加密操作

    # # 模拟用户操作
    # u = User() # 获取到对象
    # u.password # 访问获取密码
    # u.password = '123'# 用户输入密码

    # 定义两个装饰器,用于访问密码时使用
    @property
    def password(self):
        return self.pwd
    
    # 用户存储时使用,存的是加密过后的数据,若要访问,得通过property装饰器
    # 用户先输入密码,传入到t_pwd,通过函数的加密返回给self.pwd;用户需要访问时,找到property
    # self.pwd,是数据库中的密码(加密过后);t_pwd是用户输入的密码(真实密码)
    @password.setter
    def password(self,t_pwd):
        self.pwd = generate_password_hash(t_pwd)
    
    # 用户二次访问之后,需要把加密过后的密码转成真实密码,与用户输入的密码进行比对
    def check_password(self,t_pwd):
        return check_password_hash(self.pwd,t_pwd)

2.记录创建时间

2.1 原因

例如当平台需要对新老用户进行区分的时候,需要一个系统默认值去记录用户注册的时间

2.2 记录创建时间的方法

# 记录创建的时间
    create_time = db.Column(db.DataTime,default=datetime.now)

3.记录修改密码时间

3.1 记录修改密码的方法

# 记录修改密码的时间
    update_time = db.Column(db.DateTime, default=datetime.now, onupdate = datetime.now)

4.公用数据表模型

由于有部分数据字段,是很多数据表中需要使用的,所以可以创建公用模型

# /flask_shop/models.py
# 此文件用于建立数据库表的模型

# 需要针对数据库的模型
from flask_shop import db
# 对数据加密         检查密码
from werkzeug.security import generate_password_hash,check_password_hash
from datetime import datetime

# 创建公用数据库模型
class BaseModel:
    # 记录创建的时间
    create_time = db.Column(db.DateTime,default=datetime.now)
    # 记录修改密码的时间
    update_time = db.Column(db.DateTime, default=datetime.now, onupdate = datetime.now)

# 需要继承数据库中的模型
class User(db.Model,BaseModel):
    __tablename__ = 't_user'
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(32), unique=True, nullable=False)
    pwd = db.Column(db.String(128))
    nick_name = db.Column(db.String(32))
    phone = db.Column(db.String(11))
    email = db.Column(db.String(32))

    # 对数据库的加密操作

    # # 模拟用户操作
    # u = User() # 获取到对象
    # u.password # 访问获取密码
    # u.password = '123'# 用户输入密码

    # 定义两个装饰器,用于访问密码时使用
    @property
    def password(self):
        return self.pwd
    
    # 用户存储时使用,存的是加密过后的数据,若要访问,得通过property装饰器
    # 用户先输入密码,传入到t_pwd,通过函数的加密返回给self.pwd;用户需要访问时,找到property
    # self.pwd,是数据库中的密码(加密过后);t_pwd是用户输入的密码(真实密码)
    @password.setter
    def password(self,t_pwd):
        self.pwd = generate_password_hash(t_pwd)
    
    # 用户二次访问之后,需要把加密过后的密码转成真实密码,与用户输入的密码进行比对
    def check_password(self,t_pwd):
        return check_password_hash(self.pwd,t_pwd)


5.修改数据库的模型

见第6章方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想成为数据分析师的开发工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值