https://www.bilibili.com/video/av53870541/?p=33

通过在数据模型中定义函数来实现加密

from werkzeug.security import generate_password_hash,check_password_hash

class User(db.Modle):
  id = db.Column(db.Integer,primary_key=True,autoincrement=True)
  name = db.Colmn(db.String(20), unique=True)
  password_hash =db.Colmn(db.String(128))    # 坑 字段不能少于128
 
  @property
  def password(self):
    print('xxxx随意')   @password.setter
  def passowrd(self,password):
    self.password_hash = generate_password_hash(password)   def check_password(self,password):
    return check_password_hash(self.password_hash,passowrd)
 

通过装饰器装饰函数

其中@property 将函数变为模型中的字段,但并不会影响到模型的字段.如果进行访问只会得到输出的字符串,不会被查看到密码

通过@pasword.setter 将函数password变为可修改 ,通过赋值来修改,赋值途中使用

from werkzeug.security import generate_password_hash 加密,通过self添加到模型数据库中
def check_password(self,password): 这是通过数据库中记载的加密密码和输入的密码进行一个对比,相同则为trun
# 往数据库中添加数据

user = User()
user.name = '张三' # 注意 模型中没有password这个字段,只有同名函数,通过装饰器@property将其变为(伪)字段 ,可以进行加密,不对模型产生改变
# @password.setter 变为能将其加密保存
user.password = ''
db.session.add(user)
db.session.commit() # ---------------------------------------
# 登录验证
user = User.query.filter(User.name=form.name.data).first()
if user:
# 使用字段中的验证函数进行hash验证,如果为正则往下
if user.check_password_hash(form.password.data):
print('密码验证成功')
session['user_name'] = user.name
return render_templates('home.html')
else:
flash('密码不正确')
return render_templates('login.html')
return render_templates('logon.html',登录表单=登录表单)

user.password_hash 访问的是加密过后的密码,不能直接看到.只能使用check_password_hash() 来进行确定,防止密码明文泄露

最新文章

  1. 【bzoj1059】 ZJOI2007—矩阵游戏
  2. LVS负载平衡集群(没成型)
  3. ASP.NET MVC controller 之间传JS值
  4. Mac系统默认MAWP配置
  5. mycat配置日志
  6. iOS 中使用Base64编码方式编码图片数据
  7. Android开发--环境配置
  8. JavaCC首页、文档和下载 - 语法分析生成器 - 开源中国社区
  9. mvn命令安装jar包--转
  10. id有空格获取不到元素
  11. [转]使用Composer管理PHP依赖关系
  12. iis 回收工作进程时出错的解决办法
  13. GCD API 理解 (一)
  14. 再谈:为什么开源C/C++开源框架极昂贵?
  15. Oracle数据库表索引失效,解决办法:修改Oracle数据库优化器模式
  16. python语法_算数运算+赋值运算符+比较运算符+逻辑运算符
  17. BootStrap DateTimePicker的使用
  18. html5 Ajax 访问.net WebApi获取视频流
  19. 关于Windows勒索病毒以及445端口防护
  20. Androidpn 简单实现及分析

热门文章

  1. python项目中对mysql数据库进行配置,并进行连接测试
  2. differences between evolution
  3. Hypothesis Tests for One Population Mean When σ Is Unknown|other
  4. G1最佳实践
  5. android apk 文件反编译
  6. Heartbeat(注意iptables和selinux的问题)
  7. 对Design model的理解与Java design model的归纳
  8. Mybatis--Statement Builders
  9. 数据库中慎用float数据类型(转载)
  10. SQL命令汇总