flask中的密码加密与模块之间关系介绍

1, flask 采用的加密是加盐加密,在哈希加密之前先随机混入盐值,再进行哈希加密

pbkdf2:sha256:50000$JVSdVljg$0662ebe3f843b97b1e8b462ce8cce907f05bf68bf52c89703b7a5bb0e305004b

  1),pbkdf2 说明采用了 hashlib 库
  2),sha256:50000 表示采用的 sha256迭代了 50000 次
  3),JVSdVljg 表示盐值参数随机生成的,一般为8位
  4),后面为加密后的密码

2, flask 之中,配置模块,数据库模块与其他模块都要最大化的封装,使得视图只需要最精简的语法就可以完成任务。

from werkzeug.security import generate_password_hash, check_password_hash
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
class User(BaseModel, db.Model):
    """用户"""
    __tablename__ = "info_user"
    id = db.Column(db.Integer, primary_key=True)  # 用户编号
    name = db.Column(db.String(32), unique=True, nullable=False)  # 用户昵称
    password = db.Column(db.String(128), nullable=False)  # 加密的密码
    news_list = db.relationship('News', backref='user', lazy='dynamic')

    '''以属性的方式完成调用方法'''
    @property
    def password(self):
        raise AttributeError("当前属性不可读")
    #set 方法
    @password.setter
    def password(self, value):
        # generate_password_hash 对密码进行加密操作!
        self.password_hash = generate_password_hash(value)
    #检查密码时调用!
    def check_passowrd(self, password):
        return check_password_hash(self.password_hash, password)

    '''使用 to_dict 函数可以帮助我们直接返回对象所有的属性!'''
    def to_dict(self):
        resp_dict = {
            "id": self.id,
            "name": self.nick_name,
            'news_list':self.news_list
        }
        return resp_dict
View Code

在视图之中,合一很简便的执行加密,这样避免了在视图函数之中进行复杂逻辑操作

# 数据库存储数据,首先导入User类
    user = User()
    user.name = name
    # 在此处进行了加密操作!在User类之中增加了装饰器,完成加密的效果!
    user.password = password

3, 在 flask 之中也封装了所有的类属性!

@app.route('/')
def index():
    '''user 对象调用to_dict()方法,也就能够获取所有的user属性!,也就数获取了数据库的信息 '''
    user = User.query.get(user_id)
    data = {
        # user 属性表示 user模块的所有属性,也可以加入news模块,这样使得模块最大化的解耦 
        'user': user.to_dict() if user else None
    }
    #将数据传递给模板!
    return render_template('news/index.html', data=data)

 

posted @ 2018-05-29 16:25  十七楼的羊  阅读(269)  评论(0编辑  收藏  举报