Flask Web开发密码加盐

一、flask框架项目搭建的基础上扩展

MVC框架模式:
MVC.png

mvc 和 mtv的区别:
1、 mtv 从 mvc 演变而来
2、 mvc的c大部分代码融合到了mtv框架的底层代码中
3、 mvc的剩余的c和v代码整合在一起,然后根据功能拆分成了T和V

  • model模型(定义模型-->属性的计算/模型-->封装到模型类中),
  • view(模板-->html,css,js)
  • control(控制-->将模型显示到视图中-->路由)
    在开发中,对模型的处理一般都要放到模板中处理,不要在视图函数中进行相关属性的计算

二、 在项目中的模板视图中直接引入

from datetime import datetime
from werkzeug.security import generate_password_hash, check_password_hash
from . import db

class User(BaseModel, db.Model):
    """用户"""
    __tablename__ = "info_user"

    id = db.Column(db.Integer, primary_key=True)  # 用户编号
    nick_name = db.Column(db.String(32), unique=True, nullable=False)  # 用户昵称
    password_hash = db.Column(db.String(128), nullable=False)  # 加密的密码
    mobile = db.Column(db.String(11), unique=True, nullable=False)  # 手机号
    avatar_url = db.Column(db.String(256))  # 用户头像路径
    last_login = db.Column(db.DateTime, default=datetime.now)  # 最后一次登录时间
    is_admin = db.Column(db.Boolean, default=False)
    signature = db.Column(db.String(512))  # 用户签名
    gender = db.Column(  # 订单的状态
        db.Enum(
            "MAN",  # 男
            "WOMAN"  # 女
        ),
        default="MAN")
    # property:将装饰器的方法提升为类属性--->默认为getter方法--->解耦
    @property
    def password(self):
        raise AttributeError("当前属性不可读")

    # 定义一个赋值的方法
    @password.setter
    def password(self, value):
        self.password_hash = generate_password_hash(value)

    # 定义一个验证密码的方法
    def check_password(self, password):
        return check_password_hash(self.password_hash, password)
  • 密码加密函数定义:
    generate_password_hash是一个密码加盐哈希函数,生成的哈希值可通过
    check_password_hash()进行验证。
函数的定义(源码).png
  • 哈希之后的哈希字符串格式是这样的:
method$salt$hash
  • 参数说明:
    password: 明文密码
    method: 哈希的方式(需要是hashlib库支持的),格式为
    pbpdf2:[:iterations]。参数说明:
          method:哈希的方式,一般为SHA1,
          iterations:(可选参数)迭代次数,默认为1000。
    slat_length: 盐值的长度,默认为8。


    flask密码加密验证.png

你可能感兴趣的:(Flask Web开发密码加盐)