def dislike(request): "不喜欢" sid = int(request.POST.get('sid')) user = request.user Swiped.objects.create(uid=user.id, sid=sid, mark='dislike') rds.zincrby(keys.HOT_RANK, config.SCORE_DISLIKE, sid) return render_json(None)
def dislike(request): '''不喜欢''' sid = int(request.POST.get('sid')) Swiped.swipe('dislike', request.user.id, sid) # ? rds.zincrby(keys.HOT_RANK, sid, config.SCORE_DISLIKE) return render_json(None)
def superlike(request): '''超级喜欢''' sid = int(request.POST.get('sid')) matched = logics.superlike(request.user, sid) # 记录全服最火的 10 个用户 rds.zincrby(keys.HOT_RANK, sid, config.SCORE_SUPERLIKE) return render_json({'is_matched': matched})
def dislike(self, request, *args, **kwargs): user_id = request.user.id user_id = self.request.data.get('uid') sid = self.request.data.get('sid') delete_obj = Swiped.objects.filter(uid=user_id, sid=sid).delete() rds.zincrby(LIKE_RANK, LIKE_KEY % sid, DISLIKE_SCORE) return Response({'code': 200, 'msg': '操作成功'})
def like(request): "喜欢" sid = int(request.POST.get('sid')) # 去创建一条数据 user = request.user result = logics.like(user, sid) rds.zincrby(keys.HOT_RANK, config.SCORE_LIKE, sid) return render_json({'matched': result})
def add_swipe_score(uid, flag): """ 增加滑动积分记录 :param uid: :param flag: like, dislike, superlike 标志 :return: """ score = {'like': 5, 'superlike': 7, 'dislike': -5}[flag] rds.zincrby('HotSwiped', uid, score)
def add_swipe_score(uid,flag): # 添加被滑动的积分记录 score = { 'like':5, 'superlike':7, 'dislike':-5 }[flag] rds.zincrby('HotSwiped',uid,score)
def dislike(request): user = request.user sid = request.POST.get('sid') # 不喜欢减5分 key = keys.HOT_RANK_KEY % sid rds.zincrby(config.RANK_KEY, config.DISLIKE_SCORE, key) Swipe.dislike(uid=user.id, sid=int(sid)) return render_json()
def superlike(request): "超级喜欢" sid = request.POST.get('sid') # 去创建一条数据 user = request.user result = logics.superlike(user, sid) # 添加得分 +7分 # 尽量避免硬编码, 把东西边的可配置,已维护 rds.zincrby(keys.HOT_RANK, config.SCORE_SUPERLIKE, sid) return render_json({'matched': result})
def superlike(request): user = request.user # 在swipe中创建一条记录. sid = request.POST.get('sid') # 超级喜欢加7分 key = keys.HOT_RANK_KEY % sid rds.zincrby(config.RANK_KEY, config.SUPERLIKE_SCORE, key) flag = logic.superlike(user.id, int(sid)) if flag: return render_json(data={'matched': True}) return render_json(data={'matched': False})
def like(request): '''操作为喜欢''' user = request.user sid = request.POST.get('sid') # 喜欢+5分 key = keys.HOT_RANK_KEY % sid # redis的sorted_set类的操作(需要将score放key前面), # 第一次执行创建这个有序集合KEY-value, 后面每次执行在原value上加上指定分数 rds.zincrby(config.RANK_KEY, config.LIKE_SCORE, key) # 在swipe中创建一条记录 flag = logic.like(user.id, int(sid)) if flag: return render_json(data={'matched': True}) return render_json(data={'matched': False})
def rewind(user): ''' 每天允许撤销 3 次 ''' # 获取当前日期已撤销的次数 now = datetime.datetime.now() key = keys.REWIND_KEY % (user.id, now.date()) rewind_times = cache.get(key, 0) # 次数检查 if rewind_times < config.REWIND_TIMES: rewind_times += 1 # 计算到晚上凌晨剩余的秒数 remain_second = 86400 - (now.hour * 3600 + now.minute * 60 + now.second) # 添加缓存记录 cache.set(key, rewind_times, remain_second) # 执行撤销操作 record = Swiped.objects.filter(uid=user.id).latest('stime') # 撤销好友记录 Friend.break_off(user.id, record.sid) # 还原积分 # 直接的思路 # if record.flag == 'like': # rds.zincrby(keys.HOT_RANK, record.sid, -config.SCORE_LIKE) # elif record.flag == 'superlike': # rds.zincrby(keys.HOT_RANK, record.sid, -config.SCORE_SUPERLIKE) # else: # rds.zincrby(keys.HOT_RANK, record.sid, -config.SCORE_DISLIKE) # 简化版思路 score_mapping = { 'like': -config.SCORE_LIKE, 'superlike': -config.SCORE_SUPERLIKE, 'dislike': -config.SCORE_DISLIKE } rds.zincrby(keys.HOT_RANK, record.sid, score_mapping[record.flag]) # 前置操作完成后,删除滑动记录 record.delete() else: raise errors.RewindLimited('反悔次数达到每日上限')
def rewind(user): '''反悔''' now = datetime.datetime.now() key = keys.REWIND_KEY % now.date() rewind_times = cache.get(key, 0) # 取不到值默认给0,使用了0次机会 if rewind_times < config.REWIND_TIMES: # 删除最近执行的滑动记录 record = Swipe.objects.filter(uid=user.id).latest( field_name='time') # latest() 根据字段查找最新的记录, earliest() 最早的记录 # 判断是否有好友关系 uid1, uid2 = (user.id, record.sid) if user.id < record.sid else (record.sid, user.id) friends = Friend.objects.filter(uid1=uid1, uid2=uid2) friends.delete() # 更新缓存中本日可反悔次数 rewind_times += 1 # 0点重置次数, 设置存在时间为今日剩余时间 timeout = 86400 - (now.hour) * 60 * 60 + now.minute * 60 + now.second cache.set(key, rewind_times, timeout) # 处理反悔之后的排名得分问题 key = keys.HOT_RANK_KEY % record.sid # if record.mark == 'like': # # 减5分 # rds.zincrby(config.RANK_KEY, -config.LIKE_SCORE, key) # elif record.mark == 'dislike': # rds.zincrby(config.RANK_KEY, -config.DISLIKE_SCORE, key) # else: # rds.zincrby(config.RANK_KEY, -config.SUPERLIKE_SCORE, key) # 写法优化,使用模型映射 mapping = { 'like': config.LIKE_SCORE, 'dislike': config.DISLIKE_SCORE, 'superlike': config.SUPERLIKE_SCORE, } rds.zincrby(config.RANK_KEY, -mapping[record.mark], key) # 模型映射 record.delete() else: logger.error('exceed the maxmium rewind times') #日志 raise errors.RewindErr # 抛出自定义错误
def like(self, request, *args, **kwargs): uid = self.request.data.get('uid') sid = self.request.data.get('sid') like_flag_obj = Swiped.objects.filter(uid=sid, sid=uid, mark__in=['like', 'superlike']).exists() # 查看对方是否也喜欢自己 if like_flag_obj: try: test_obj = Swiped.objects.create(uid=uid, sid=sid, mark='like') print(test_obj) # TODO uid, sid = (uid, sid) if int(uid) < int(sid) else (sid, uid) Friend.objects.create(uid1=uid, uid2=sid) # 满意+5 rds.zincrby(LIKE_RANK, LIKE_KEY % sid, LIKE_SOCRE) except Exception as e: return Response({'code': 500, 'msg': '错误'}) return Response({'code': 200}) test_obj, created = Swiped.objects.get_or_create(uid=uid, sid=sid, mark='like') ser = self.get_serializer(test_obj, many=False) rds.zincrby(LIKE_RANK, LIKE_KEY % sid, LIKE_SOCRE) return Response({'code': 200, 'data': ser.data})
def like(request): '''喜欢''' sid = int(request.POST.get('sid')) matched = logics.like(request.user, sid) rds.zincrby(keys.HOT_RANK, sid, config.SCORE_LIKE) return render_json({'is_matched': matched})