Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #3
0
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})
Beispiel #4
0
    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': '操作成功'})
Beispiel #5
0
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})
Beispiel #6
0
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)
Beispiel #7
0
def add_swipe_score(uid,flag):
    # 添加被滑动的积分记录
    score = {
        'like':5,
        'superlike':7,
        'dislike':-5
     }[flag]

    rds.zincrby('HotSwiped',uid,score)
Beispiel #8
0
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()
Beispiel #9
0
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})
Beispiel #10
0
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})
Beispiel #11
0
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})
Beispiel #12
0
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('反悔次数达到每日上限')
Beispiel #13
0
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  # 抛出自定义错误
Beispiel #14
0
    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})
Beispiel #15
0
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})