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)
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)