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
在视图之中,合一很简便的执行加密,这样避免了在视图函数之中进行复杂逻辑操作
# 数据库存储数据,首先导入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)