Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #3
0
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