def delete(): """执行系统通知的删除操作""" u = current_user() info_id = int(request.form.get('info_id', -1)) i: Info = Info.one(id=info_id) if i is not None: # 权限验证 if i.receiver_id == u.id: Info.delete(i) key = 'user_id_{}.received_info'.format(u.id) data_cache.delete(key) return redirect(url_for('.info')) return abort(404)
def detail(info_id): """查看系统通知详情""" u = current_user() i: Info = Info.one(id=info_id) if i is None or u.id != i.receiver_id: return abort(404) if not i.been_read: i.been_read = True i.save() key = 'info_id_{}.info'.format(i.id) data_cache.delete(key) token = new_csrf_token() return render_template("info/info_detail.html", user=u, info=i, token=token)
def cached_info_id2info(info_id): """ 根据Info id 返回 Info 对象。 如果缓存命中,则从缓存中拉取包含Info信息的字典,使用get_model得到Info对象。 如果缓存穿透,则从数据库查询,拿到数据后将数据序列化后存储到redis。 """ key = 'info_id_{}.info'.format(info_id) try: # 拿到json 格式的数据 v = data_cache[key] except KeyError: # 如果没有缓存 info = Info.one(id=info_id) v = json.dumps(info.json()) data_cache.set(key, v, 3600) log('缓存丢失,向数据库拉取数据,重建缓存') return info else: # json序列化为dict,dict生成Info对象 d = json.loads(v) info = Info.get_model(d) log('缓存命中,直接使用') return info