def rewind(user): key = keys.REWIND_KEY % user.id cached_rewinded_times = cache.get() if cached_rewinded_times < config.MAX_REWIND: cached_rewinded_times += 1 now = datetime.datetime.now() left_seconds = 86400 - now.hour * 3600 - now.minute * 60 - now.second cache.set(cached_rewinded_times, timeout=left_seconds) try: record = Swiped.objects.filter(uid=user.id).latest('time') Friend.delete_friend(uid1=user.id, uid2=record.sid) record.delete() return 0, None except Swiped.DoesNotExist: return errors.NO_RECORD, '无操作记录,无法反悔' else: return errors.EXCEED_MAXIMUN_REWIND, '超过最大反悔次数'
def rewind(uid): key = keys.REWIND % uid cached_rewind_times = cache.get(key, 0) if cached_rewind_times < config.MAX_REWIND_TIMES: # 说明可以执行反悔操作. # 查找上一次操作的Swiped记录 record = Swiped.objects.latest('time') # 如果建立了好友关系,好友关系也需取消. if Friend.is_friend(uid1=uid, uid2=record.sid): Friend.delete_friend(uid1=uid, uid2=record.sid) # 更新缓存 cached_rewind_times += 1 now = datetime.datetime.now() timeout = 86400 - (3600 * now.hour + 60 * now.minute + now.second) cache.set(key, cached_rewind_times, timeout) # 处理反悔之后排行榜的分数问题 # if record.mark == 'like': # rds.zincrby(config.TOP_N, -config.LIKE_SCORE, # keys.TOP_N_KEY % record.sid) # elif record.mark == 'dislike': # rds.zincrby(config.TOP_N, -config.DISLIKE_SCORE, # keys.TOP_N_KEY % record.sid) # else: # rds.zincrby(config.TOP_N, -config.SUPERLIKE_SCORE, # keys.TOP_N_KEY % record.sid) # 使用字典做模式匹配优化以上代码 mapping = { 'like': config.LIKE_SCORE, 'dislike': config.DISLIKE_SCORE, 'superlike': config.SUPERLIKE_SCORE } rds.zincrby(config.TOP_N, -mapping.get(record.mark), keys.TOP_N_KEY % record.sid) record.delete() return True else: raise errors.ExceedMaximumRewindTimes
def rewind(user): key = keys.PROFILE_KEY % user.id cached_rewinded_times = cache.get(key, 0) if cached_rewinded_times < config.MAX_REWIND: # 说明当天还有反悔机会 # 缓存中的反悔次数要加1 cached_rewinded_times += 1 now = datetime.datetime.now() left_seconds = 86400 - (now.hour * 3600 + now.minute * 60 + now.second) cache.set(key, cached_rewinded_times, time=left_seconds) # 删除Swiped表中的最近的一条记录 try: record = Swiped.objects.filter(uid=user.id).latest('time') # 考虑如果有好友关系, 返回之后,好友关系也应该解除 Friend.delete_friend(uid1=user.id, uid2=record.sid) record.delete() return 0, None except Swiped.DoesNotExist: # return render_json(code=erros.NO_RECORD,data='无操作记录,无法反悔' return erros.NO_RECORD, '无操作记录,无法反悔' else: return erros.EXCEED_MAXIMUM_REWIND, '超过最大反悔次数'
def delete(request): sid = request.POST.get('sid') Friend.delete_friend(request.user.id, sid) Swiperd.delete_mark(request.user.id, sid) return render_json(None)
def dislike(uid, sid): # 创建一条记录 Swiped.dislike(uid, sid) Friend.delete_friend(uid, sid) return True
def dislike(uid, sid): Swiped.dislike(uid=uid, sid=sid) Friend.delete_friend(uid, sid) return True
def dislike(uid, sid): Swiped.dislike(uid=uid, sid=sid) # 删除好友记录 Friend.delete_friend(uid, sid)