Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #4
0
    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")