风火编程--falsk后台的用户密码相关逻辑

版权声明:风火编程, 欢迎指正. https://blog.csdn.net/weixin_42620314/article/details/82811377

flask后台的用户密码相关逻辑

模型类设置

class User(BaseModel, db.Model):
    """用户表"""
    __tablename__ = "ih_user_profile"
    id = db.Column(db.Integer, primary_key=True)  # 用户id
    name = db.Column(db.String(32), unique=True)  # 用户昵称,不能重复
    password_hash = db.column(db.String(128), nullable=True)  # 加密密码
    mobile = db.Column(db.String(11), unique=True, nullable=False)  # 手机号
    real_name = db.Column(db.String(32))  # 真实姓名
    id_card = db.Column(db.String(20))  # 身份证号
    avater_url = db.Column(db.String(128))  # 用户头像路径
    orders = db.relationship("Order", backref="user")  # 用户的订单
    @property
    def password(self):
         """读取密码的property属性"""
        raise AttributeError("不支持访问密码")
    @password.setter
    def password(self, origin_password):
         """设置password_hash"""
         @property
    def password(self):
        """密码的property属性"""
        raise AttributeError("不支持访问密码")
    @password.setter
    def password(self, origin_password):
        """设置password_hash"""
        使用sha256加密方法,默认8位盐值
        from werkzeug.security import generate_password_hash
        self.password_hash = generate_password_hash(origin_password)
    def check_password(self, password):
        """校验密码的方法"""
        from werkzeug.security import check_password_hash
        return check_password_hash(self.password_hash, password)

视图中的处理

1. 保存密码

user.password =  password

2. 检查尝试错误次数封ip

failed_times = redis.get(ip)
if failed_times and failed_times>MAX_TIMES:
    return jsonify(errcode=RET.REQERR, errmsg="尝试次数超过上限")

3. 校验密码

user and user.check_password(password)

4. 记录ip的尝试错误次数

ip = request.remote_addr
redis_store.incr(ip)  # 记录ip尝试错误次数
redis_store.expire(ip, FORBID_TIME)

5. 记录登录状态

session["user_id"] = user.id
session["mobile"] = mobile
 session["user_name"] = user.name

猜你喜欢

转载自blog.csdn.net/weixin_42620314/article/details/82811377
今日推荐