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

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值