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章方法