запрос соответствия drf CustomUser не существует

#python-3.x #django #django-rest-framework

#python-3.x #django #django-rest-framework

Вопрос:

я работаю над мобильным приложением с помощью customuser. я пытаюсь отправить otp по почте при создании пользователя и установить для is_verify значение false, и после проверки пользователя с помощью otp для is_verify будет установлено значение true, но если пользователь не проверяет, что otp add закрывает приложение, затем снова при регистрации мы добавляем проверку, существует ли пользователь, и is_verified имеет значение true, а затем возвращает уже существует в противном случае создать пользователя и снова отправьте otp. итак, я получаю сообщение об ошибке, если user doesnotexist, то он показывает эту ошибку:

 users.models.CustomUser.DoesNotExist: CustomUser matching query does not exist.
 

и он получает эту ошибку от, кроме customuser.doesnotexist блокирует

models.py:

 class CustomUser(AbstractBaseUser, PermissionsMixin):
    first_name = models.CharField(_('first name'), max_length=50)
    last_name = models.CharField(_("last name"), max_length=50)
    email = models.EmailField(_('email address'), unique=True)
    mobile_number = models.CharField(
        _('mobile number'), max_length=12, unique=True)
    is_staff = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    date_joined = models.DateTimeField(default=timezone.now)
    user_type = models.IntegerField(_("user_type"))
    otp = models.CharField(_("otp"), max_length=10, default="0")
    is_verified = models.BooleanField(default=False)
    USER_TYPE_CHOICES = (
        (1, 'users'),
        (2, 'courier'),
        (3, 'admin'),
    )

    user_type = models.PositiveSmallIntegerField(
        choices=USER_TYPE_CHOICES, null=True)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = CustomUserMananager()

    def __str__(self):
        return self.email
 

seralizers.py:

 class CustomUserSerializer(serializers.ModelSerializer):
profile = UserProfileSerializer(required=False)
password = serializers.CharField(write_only=True, required=False)
   
class Meta:
    model = CustomUser
    fields = ('id', 'first_name', 'last_name', 'email',
              'mobile_number', 'password', 'is_active', 'user_type', 'otp', 'profile')

def create(self, validated_data):
    profile_data = validated_data.pop('profile', None)
    user = CustomUser(
        email=validated_data['email'],
        mobile_number=validated_data['mobile_number'],
        first_name=validated_data['first_name'],
        last_name=validated_data['last_name'],
        user_type=validated_data['user_type'],
    )
    user.set_password(validated_data['password'])

    def random_with_N_digits(n):
        range_start = 10**(n-1)
        range_end = (10**n)-1
        return randint(range_start, range_end)
    otp = random_with_N_digits(5)
    user.otp = otp
    user.is_active = False

    user.save()
    subject = 'Please Confirm Your Account'
    message = 'Your 5 Digit Verification Pin: {}'.format(otp)
    email_from = '*****'
    recipient_list = [str(user.email), ]
    send_mail(subject, message, email_from, recipient_list)
    #user = CustomUser.objects.create(**validated_data)
    # if profile_data:
    UserProfile.objects.create(
        user=user, age=None, gender=None)
    return user

def update(self, instance, validated_data):
    profile_data = validated_data.pop('profile', None)
    # update user data
    instance.first_name = validated_data.get(
        'first_name', instance.first_name)
    instance.last_name = validated_data.get(
        'last_name', instance.last_name)
    instance.email = validated_data.get('email', instance.email)
          instance.save()
    password = validated_data.get('password', None)
    if password:
        instance.set_password(password)
        instance.save()
    return instance
 

views.py:

 @api_view(["POST"])
@permission_classes((AllowAny,))
def register(request):
    try:
        user = CustomUser.objects.get(
            email=request.data.get('email'), is_verified=True)
                if user:
                   return Response({'message': 'Customer with this mail already exists', 'status': 'false', 'status_code': status.HTTP_401_UNAUTHORIZED, 'currentTimeStamp': datetime.datetime.now()}, status=status.HTTP_400_BAD_REQUEST)
    except CustomUser.DoesNotExist:
        serializer = CustomUserSerializer(data=request.data)
        if serializer.is_valid():
            user = serializer.save()
            token, created = Token.objects.get_or_create(user=user)
            current_time = datetime.datetime.now()
            return Response({'status_code': status.HTTP_200_OK, 'status': 'true', 'currentTimeStamp': current_time, 'message': 'User registered successfully, OTP sent to your Mail', 'data': {'id': user.id, 'token': token.key, 'user_type': user.user_type}}, status=status.HTTP_200_OK)
    return Response({'message': serializer.errors, 'status': 'false', 'status_code': status.HTTP_401_UNAUTHORIZED, 'currentTimeStamp': datetime.datetime.now()}, status=status.HTTP_400_BAD_REQUEST)

        
 

кажется, он показывает ошибку после после этой проверки:

 user = CustomUser.objects.get(email=email)
 

но поскольку я уже создал пользователя с помощью serializer.save, он должен получать текущего пользователя

Редактировать:

я решил это, сохранив объект serailizer.save для пользователя, но я все еще застрял в этой ситуации, так как я хочу отправлять почту каждый раз, пока значение user is_verified не станет true, но после первой регистрации его отображение customuser уже существует. его единственное поле проверки электронной почты, поскольку оно поставляется с django, есть ли что-нибудь, чтобы переопределить это, поэтому оно должно показывать, что пользователь существует, только если email и is_verified имеют значение true

Комментарии:

1. Когда вы проверяете администратора django, показывает ли он, что пользователь был создан?

2. да, пользователь создается

3. Похоже, вы все делаете правильно, не могли бы вы опубликовать свой код в каком-нибудь репозитории, чтобы мы могли его отладить

4. посмотрите изменения…

5. @PhilipMutua можете ли вы взглянуть на это