Пример #1
0
    def put(self, request, format=None):
        post_vars = request.DATA.copy()
        email = post_vars.get('email')
        phone_number = post_vars.get('phone')
        validate = post_vars.get('validate')
        user = request.user
        if email:
            if not user.email:
                raise error.Error(error.EMAIL_NOT_BIND, u'未绑定邮箱')
            check_email(post_vars)
            post_vars.setdefault('new_email', email)
            response = _change_email_request(request.user, post_vars, need_password=False)
            result = json.loads(response.content)
            success = result.get('success')
            if not success:
                raise error.Error(error.EMAIL_CHANGE_FAILED, result.get('error'))

        profile = user.profile
        profile = self.set_common_profile(request, profile)

        if phone_number:
            if not profile.phone_number:
                raise error.Error(error.PHONE_NOT_BIND, u'未绑定手机号')
            check_phone_number(post_vars)
            check_validate_used(post_vars)
            profile.phone_number = phone_number

        try:
            profile.save()
        except IntegrityError:
            raise error.Error(error.PHONE_NUMBER_EXIST, u'手机号已存在')

        return Response(get_user_info(request.user), status=status.HTTP_202_ACCEPTED)
Пример #2
0
    def post(self, request):
        post_vars = request.DATA.copy()
        check_email(post_vars)
        email = post_vars.get('email')
        password = post_vars.get('password')
        users = User.objects.filter(email=email)
        if users.exists():
            server_track(request, 'api.user.email.bind_failure', {
                'bind_type': 'email',
                'provider': '',
                'uid': request.user.id,
                'error': {
                    'msg': 'EMAIL_EXIST',
                    'detail': email,
                }
            })
            raise error.Error(error.EMAIL_EXIST, u'该邮箱已被注册或绑定')
        user = request.user
        if user.email:
            server_track(request, 'api.user.email.bind_failure', {
                'bind_type': 'email',
                'provider': '',
                'uid': request.user.id,
                'error': {
                    'msg': 'EMAIL_ALREADY_BIND',
                    'detail': email,
                }
            })
            raise error.Error(error.EMAIL_ALREADY_BIND, u'该邮箱已被注册或绑定')
        if password:
            if user.password != '!':
                server_track(request, 'api.user.email.bind_failure', {
                    'bind_type': 'email',
                    'provider': '',
                    'uid': request.user.id,
                    'error': {
                        'msg': 'PASSWORD_ALREADY_BIND',
                        'detail': email,
                    }
                })
                raise error.Error(error.PASSWORD_ALREADY_BIND, u'之前已绑定密码')
            user.set_password(password)
        # TODO: 操作前是否需要绑定密码
        post_vars.setdefault('new_email', email)
        response = _change_email_request(user, post_vars, need_password=False)
        result = json.loads(response.content)
        success = result.get('success')
        if not success:
            server_track(request, 'api.user.email.bind_failure', {
                'bind_type': 'email',
                'provider': '',
                'uid': request.user.id,
                'error': {
                    'msg': 'EMAIL_CHANGE_FAILED',
                    'detail': email,
                }
            })
            raise error.Error(error.EMAIL_CHANGE_FAILED, result.get('error'))
        user.email = email
        user.save()

        server_track(request, 'api.user.email.bind_success', {
            'bind_type': 'email',
            'provider': '',
            'uid': user.id,
            'email': email
        })

        return Response(status=status.HTTP_204_NO_CONTENT)