class ResetPwd(object): VALIDITY_LAST = 600 RESETPWD_KEY = 'RESETPWD_KEY' RESENDMAIL_LIMIT = 1 RESENDMAIL_KEY = 'RESENDMAIL_KEY' def __init__(self, user_name): self.resetpwd_key = '%s_%s' % (self.RESETPWD_KEY, user_name) self.resendmail_key = '%s_%s' % (self.RESENDMAIL_KEY, user_name) self.user = DoUserModel(user_name) def _send_reset_email(self): code = get_random_code() send_mail( subject=u'yxt_account:密码重置', message=u'时间:%s\n验证码:%s\n有效期:%s s' % ( get_datetime_now(), code, str(self.VALIDITY_LAST)), from_email=settings.EMAIL_HOST_USER, recipient_list=[self.user.get_user()['user_email']], fail_silently=True ) cache.set(self.resendmail_key, 1, self.RESENDMAIL_LIMIT) cache.set(self.resetpwd_key, code, self.VALIDITY_LAST) def send_info(self): if not self.user.get_user(): return False, 404 if cache.get(self.resendmail_key): return False, 422 threading.Thread(target=self._send_reset_email).start() return True, None def _check_code(self, code): cache_code = cache.get(self.resetpwd_key) return cache_code == code def reset_pwd(self, code, user_pwd_new): if not self.user.get_user(): return False if not self._check_code(code): return False cache.delete(self.resetpwd_key) return self.user.reset_pwd(user_pwd_new)
def __init__(self, user_name): self.resetpwd_key = '%s_%s' % (self.RESETPWD_KEY, user_name) self.resendmail_key = '%s_%s' % (self.RESENDMAIL_KEY, user_name) self.user = DoUserModel(user_name)