Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] Validação não funcionou

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

4 respostas

Olá Vitor! Tudo bem?

Como você não compartilhou o código que é implementado a validação não consigo lhe apontar se o problema está no código e na forma que você inseriu a informações do telefone ou somente em uma das alternativas.

Mas, levando como ponto de partida que você implementou a sua validação exatamente igual como a desenvolvida durante a aula, o problema da validação está na estrutura de como você passou o número do telefone.

Pois o regex, [0-9]{2} [0-9]{5}-[0-9]{4}, usado na validação, espera que você passe exatamente a estrutura 85 98765-0908. Então peço que teste utiliza essa estrutura que compartilhei no seu campo "Celular", porém, caso não resolva, peço que compartilhe todo o seu projeto, via GitHub ou Drive do Google para que eu teste.

No mais, bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.
#VALIDATORS
import re

def cpf_invalido(CPF):
    return len(CPF) != 11


def nome_invalido(Nome):
    return not Nome.isalpha()



def celular_invalido(Celular):
    
    padrao = f'[0-9]{2} [0-9]{5}-[0-9]{4}'

    resposta = re.findall(padrao,Celular)

    return not resposta
#SERIALIZERS

class EstudantesSerializer(serializers.ModelSerializer):
    class Meta:
        model = Estudantes
        fields = ['id','Nome','Email','CPF','Data_Nascimento','Celular']


    def validate(self,dados):
        if cpf_invalido(dados['CPF']):
            raise serializers.ValidationError({'CPF':'O CPF deve ter 11 digitos!'})

        if nome_invalido(dados['Nome']):
            raise serializers.ValidationError({'Nome':'Nome apenas com letras'})

        if celular_invalido(dados['Celular']):
            raise serializers.ValidationError({'Celular':'Celular com 13 numeros'})
        return dados
solução!

Bom dia, Vitor! Joia?

Analisando o seu código percebi que o problema na validação está acontecendo porque você deixou o "f" no início da string que a variável padrao que está na função celular_invalido.

O "f" no formato que você deixou é uma forma de apontar para o Python que o que estiver dentro de "{}" poderá ser formatado ou será uma variável, mas no seu caso é o valor do regex na identificação de um número de telefone.

Com isso, para solucionar o problema basta retirar o "f". Sua função celular_invalido deve ficar assim:

def celular_invalido(Celular):
    
    padrao = '[0-9]{2} [0-9]{5}-[0-9]{4}'

    resposta = re.findall(padrao,Celular)

    return not resposta

Espero que dê tudo certo dessa vez!

Muito obrigado, funcionou perfeitamente, não tinha me atentado a esse detalhe.