Пример #1
0
def get_code_by_sms(request, tel):
    """获取短信验证码"""
    if check_tel(tel):
        if caches['default'].get(f'{tel}:block'):
            resp = DefaultResponse(*CODE_TOO_FREQUENCY)
        else:
            code = gen_mobile_code()
            message = f'您的短信验证码是{code},打死也不能告诉别人哟!【Python小课】'
            send_sms_by_luosimao.apply_async((tel, message),
                                             countdown=random.random() * 5)
            caches['default'].set(f'{tel}:block', code, timeout=120)
            caches['default'].set(f'{tel}:valid', code, timeout=1800)
            resp = DefaultResponse(*MOBILE_CODE_SUCCESS)
    else:
        resp = DefaultResponse(*INVALID_TEL_NUM)
    return resp
Пример #2
0
def login(request):
    """登录(获取用户身份令牌)"""
    username = request.data.get('username')
    password = request.data.get('password')
    if (check_tel(username) or check_email(username)
            or check_username(username)) and len(password) >= 6:
        password = to_md5_hex(password)
        q = Q(username=username, password=password) | \
            Q(tel=username, password=password) | \
            Q(email=username, password=password)
        user = User.objects.filter(q)\
            .only('username', 'realname').first()
        if user:
            if user.status:
                # 用户登录成功通过JWT生成用户身份令牌
                payload = {
                    'exp':
                    datetime.datetime.utcnow() + datetime.timedelta(days=1),
                    'data': {
                        'userid': user.userid,
                        'realname': user.realname,
                        'roleid': user.roles.get_queryset().first().roleid
                    }
                }
                token = jwt.encode(payload, SECRET_KEY,
                                   algorithm='HS256').decode()
                with atomic():
                    current_time = timezone.now()
                    if not user.lastvisit or \
                            (current_time - user.lastvisit).days >= 1:
                        user.point += 2
                        user.lastvisit = current_time
                        user.save()
                    loginlog = LoginLog()
                    loginlog.user = user
                    loginlog.logdate = current_time
                    loginlog.ipaddr = get_ip_address(request)
                    loginlog.save()
                resp = DefaultResponse(*USER_LOGIN_SUCCESS,
                                       data={'token': token})
            else:
                resp = DefaultResponse(*USER_LOGIN_STATUS)
        else:
            resp = DefaultResponse(*USER_LOGIN_FAILED)
    else:
        resp = DefaultResponse(*INVALID_LOGIN_INFO)
    return resp
Пример #3
0
def get_code_by_sms(request, tel):
    if check_tel(tel):
        if caches['default'].get(f'{tel}:block'):
            res = DefaultResponse(*CODE_TOO_FREQUENCY)
        else:
            code = gen_mobile_code()
            time.sleep(random.random() * 10)
            message = f'您的短信验证码为{code}, 如非本人操作请忽略【铁壳网络】'
            print(message)
            # 成为消息的生产者,并将任务加入队列
            # send_sms_by_luosimao.apply_async((message, tel), countdown=random.random() * 10)
            caches['default'].set(f'{tel}:block', code, timeout=120)
            caches['default'].set(f'{tel}:valid', code, timeout=1800)
            res = DefaultResponse(*MOBILE_CODE_SUCCESS)
    else:
        res = DefaultResponse(*INVALID_TEL_NUM)
    return res