def patch(self, request): """ Обновить поля профиля текущего юзера Обновление частичное (не требуется заполнение всех полей) """ serializer = UserSerializer(request.user, data=request.data) serializer.is_valid(raise_exception=True) serializer.save() return Response(serializer.data, status=status.HTTP_200_OK)
def signup(self, request): try: user = User.objects.get(email=request.data['email']) if (user != None): return Response(data={ 'message': 'A user with this email is already registered.' }, status=400) except User.DoesNotExist: pass hashed = bcrypt.hashpw(request.data['password'].encode('utf-8'), bcrypt.gensalt(12)) request.data['password'] = hashed.decode('utf-8') request.data['isVerified'] = 1 request.data['isActive'] = 1 serializer = UserSerializer(data=request.data) if (serializer.is_valid() == False): print(serializer.errors) print(serializer) serializer.save() return Response(data={ 'code': 200, 'message': "You are signed up successfully." }, status=200)
def post(self, request, format=None): """ Create user, add it to both db and redis leaderboards/hash. :param request: request :param format: format :return: """ serializer = UserSerializer(data=request.data) if serializer.is_valid(): user_obj = serializer.save() user_info = get_hash_item(serializer.data) redis_hash.create_hash(serializer.data['user_id'], user_info) points = 0 if 'points' in request.data: points = request.data['points'] user_score = UserScore.objects.create(user_id=user_obj, score_worth=points) user_score.save() score_mapping = {str(serializer.data['user_id']): points} redis_leaderboard.add_user_score(score_mapping) redis_leaderboard.add_score_to_country(user_info['country'], score_mapping) data = serializer.data data['rank'] = redis_leaderboard.get_rank(data['user_id']) data['points'] = points return Response(data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def patch(self, request): current_user = request.user user_data = clear_dict(request.data) profile_data = user_data.get('profile') if 'profile' in user_data: del user_data['profile'] serializer = UserSerializer(current_user, data=user_data, partial=True, allow_null=True) if serializer.is_valid(): serializer.save() if profile_data: profile_serializer = ProfileSerializer( current_user.user_profile, data=profile_data, partial=True, allow_null=True) if profile_serializer.is_valid(): profile_serializer.save() return JsonResponse(data=serializer.data, status=201, safe=False) return JsonResponse(status=400, data="wrong parameters")