def reset_confirm(): if current_user.is_authenticated: return redirect(url_for('.login')) form = ResetPwdForm() if form.validate_on_submit(): email = form.email.data usr = User.query.filter_by(email=email).first() # 如果输入的邮箱不存在 if not usr: flash('邮箱不存在,请输入正确的邮箱~', 'danger') return render_template('main/auth/resetPwd.html', form=form) # 如果验证码已经超出了有效时间 if rd.get(usr.id) is None: flash('验证码已过期.', 'danger') return render_template('main/auth/resetPwd.html', form=form) pwd = form.confirm_pwd.data ver_code = form.ver_code.data # 如果输入的验证码与redis中的不一致 if ver_code != rd.get(usr.id): flash('验证码错误') return render_template('main/auth/resetPwd.html', form=form) usr.set_password(pwd) db.session.commit() flash('密码重置成功!', 'success') return redirect(url_for('.login')) return render_template('main/auth/resetPwd.html', form=form)
def load_one(): one = rd.get('one') # 防止服务器重启之后清空了redis数据导致前端获取不到当日one内容 if not one: one = OneSentence.query.filter_by(day=datetime.date.today()).first() return jsonify({'one': one.content}) return jsonify({'one': one})
def monitor_server_status(): while True: cpu_rate = psutil.cpu_percent() mem_rate = psutil.virtual_memory().percent if cpu_rate > 1 or mem_rate > 95: if not rd.get('warnEmail'): # send_server_warning_mail(cpu_rate=cpu_rate, mem_rate=mem_rate) rd.set('warnEmail', 1) time.sleep(5) print('start threading...')
def update_github_avatar(): try: link = rd.get('avatar') res = requests.get(link, timeout=30) md5 = get_md5(str(get_current_time())) with open(basedir + '/uploads/github/{}.png'.format(md5), 'wb') as f: f.write(res.content) # 移除上一次任务存储的图片 pre_md5 = rd.get('pre_md5') if pre_md5: import os os.remove(basedir + '/uploads/github/{}.png'.format(pre_md5)) # 更新redis中local_avatar的值 rd.set('local_avatar', '/tool/github/{}.png'.format(md5)) rd.set('pre_md5', md5) logger.info('更新github头像成功!') except Exception as e: logger.error('更新github头像失败!失败原因:\n' + traceback.format_exc())
def login(): # 若当前已有用户登录则返回主页 if current_user.is_authenticated: return redirect(url_for('blog_bp.index')) remote_ip = request.headers.get('X-Real-Ip') if remote_ip is None: remote_ip = request.remote_addr ban_ip = rd.get(str(remote_ip)) form = LoginForm() if ban_ip is not None: if int(ban_ip) >= 5: flash('当前IP登录错误次数过多,已被禁止登录,请明天再试!', 'info') return render_template('main/login.html', form=form) if form.validate_on_submit(): usr = form.usr_email.data pwd = form.password.data user = User.query.filter( or_(User.username == usr, User.email == usr.lower())).first() if user is not None and user.status == 2: flash('您的账号处于封禁状态,禁止登陆!联系管理员解除封禁!', 'danger') return redirect(url_for('.login')) if user is not None and user.check_password(pwd): if login_user(user, form.remember_me.data): user.recent_login = datetime.now() login_log = LoginLog(login_addr=remote_ip, user=user, real_addr=get_ip_real_add(remote_ip)) db.session.add(login_log) db.session.commit() flash('登录成功!', 'success') if request.args.get('next'): return redirect(url_for(request.args.next)) print(request.referrer) return redirect(request.referrer) elif user is None: flash('无效的邮箱或用户名.', 'danger') else: if ban_ip is None: rd.set(str(request.remote_addr), str(1), ex=60 * 60 * 24) else: rd.set(str(request.remote_addr), str(int(ban_ip) + 1), ex=60 * 60 * 24) flash('无效的密码', 'danger') return render_template('main/login.html', form=form)
def load_github(): theme = request.form.get('theme') star = rd.get('star') if star is None: star, fork, watcher, star_dark, fork_dark, watcher_dark, user_info, repo_info = github_social( ) avatar = user_info.json()['avatar_url'] repo_desc = repo_info.json()['description'] # 获取浅色主题的shield rd.set('star', star.text) rd.set('fork', fork.text) rd.set('watcher', watcher.text) # 获取深色主题的shield rd.set('star_dark', star_dark.text) rd.set('fork_dark', fork_dark.text) rd.set('watcher_dark', watcher_dark.text) rd.set('avatar', avatar) rd.set('repo_desc', repo_desc) star = star.text if theme == 'dark': star = star_dark.text else: if theme == 'dark': fork = rd.get('fork_dark') watcher = rd.get('watcher_dark') star = rd.get('star_dark') else: fork = rd.get('fork') watcher = rd.get('watcher') avatar = rd.get('avatar') repo_desc = rd.get('repo_desc') return jsonify({ 'star': star, 'fork': fork, 'watcher': watcher, 'avatar': avatar, 'repo_desc': repo_desc })
def load_one(): one = rd.get('one') return jsonify({'one': one})
def server_status(): if request.method == 'POST': # 获取redis中历史缓存数据 history_percent = rd.lrange(current_user.id, 0, -1) history_memory = rd.lrange(str(current_user.id) + 'mem', 0, -1) times = rd.lrange('times', 0, -1) # 获取cpu相关信息 cpu_use_rate = psutil.cpu_percent() history_percent.append(cpu_use_rate) # 获取内存相关信息 memory = psutil.virtual_memory() history_memory.append(memory.percent) # 磁盘信息 disk = psutil.disk_usage('/') now_time = datetime.now().strftime('%H:%M:%S') times.append(now_time) net = psutil.net_io_counters() # 只保留历史200条数据 if len(times) > 200: times.pop(0) history_percent.pop(0) rd.lpop(1) rd.lpop('times') rd.lpop('1mem') # 存入到redis缓存数据库 rd.rpush(current_user.id, cpu_use_rate) rd.rpush('times', now_time) rd.rpush(str(current_user.id) + 'mem', memory.percent) else: # 存入到redis缓存数据库 rd.rpush(current_user.id, cpu_use_rate) rd.rpush('times', now_time) rd.rpush(str(current_user.id) + 'mem', memory.percent) if cpu_use_rate > 95 or memory.percent > 95: # 发送告警邮件 send = rd.get('warningEmail') if not send: # 发送间隔三小时,不然会一直收到邮件,如果该条件满足 send_server_warning_mail(cpu_rate=cpu_use_rate, mem_rate=memory.percent) rd.set('warningEmail', 1, ex=60 * 60 * 3) return jsonify({ 'times': times, 'cpu_rates': history_percent, 'mem_rates': history_memory, 'disk': [ round(disk.free / 1024 / 1024 / 1024, 2), round(disk.used / 1024 / 1024 / 1024, 2) ], 'net': [ round(net.bytes_sent / 1024 / 1024, 2), round(net.bytes_recv / 1024 / 1024, 2), net.packets_sent, net.packets_recv, net.errin, net.errout, net.dropin, net.dropout ] }) cpu_counts = psutil.cpu_count() cpu_use_rate = psutil.cpu_percent() memory = psutil.virtual_memory() disk = psutil.disk_usage('/') net = psutil.net_io_counters() return render_template( 'backend/serverStatus.html', cpu_counts=cpu_counts, cpu_use_rate=cpu_use_rate, memory_total=round(memory.total / 1024 / 1024 / 1024, 2), memory_used=round(memory.used / 1024 / 1024 / 1024, 2), mem_percent=memory.percent, disk_total=round(disk.total / 1024 / 1024 / 1024, 2), disk_used=round(disk.used / 1024 / 1024 / 1024, 2), disk_free=round(disk.free / 1024 / 1024 / 1024, 2), net=net)