1
resposta

validação do campo "nome" com o método isalpha()

Nas aulas 2 e 3, o professor faz a validação de alguns campos, inclusive o campo nome, após alguns teste notei que o método validate_nome gera um erro quando eu coloco o nome e sobrenome do cliente por exemplo... Após algum tempo tentando achar o problema vi pelo shell que o caractere que gera o erro é o espaço em branco entre os nomes, fazendo com que o isalpha() retorne False e gere a mensagem de erro.

Gostaria de saber como proceder para que o método valide o nome completo do cliente, como solução pensei em fazer um lista e fazer a validação em cada termo da lista .split(), mas acredito que essa não seja a melhor forma de fazer...

Método de validação do nome:

   def validate_nome(self, nome):
        if not nome.isalpha():
            raise serializers.ValidationError("Não inclua números no nome.")
        return nome

Classe ClienteSerializer:

class ClienteSerializer(serializers.ModelSerializer):
    class Meta:
        model = Cliente
        fields = '__all__'

    def validate_cpf(self, cpf):
        if len(cpf) != 11:
            raise serializers.ValidationError("O CPF deve ter 11 digitos, apenas números.")
        return cpf

    def validate_rg(self, rg):
        if len(rg) != 9:
            raise serializers.ValidationError("O RG deve ter 9 digitos, apenas números")
        return rg

    def validate_nome(self, nome):
        # se o nome tiver espaço em branco, gera um erro. VRF correção
        if not nome.isalpha():
            raise serializers.ValidationError("Não inclua números no nome.")
        return nome

    def validate_celular(self, celular):
        if len(celular) < 11:
            raise serializers.ValidationError("O número de celular deve no minimo 11 digitos")
        return celular

Obrigado!

1 resposta

Olá Jimmie! Tudo bem?

O método isalpha() está gerando um erro quando você coloca o nome e sobrenome do cliente, pois o espaço em branco entre os nomes faz com que o método retorne False e gere uma mensagem de erro.

Uma solução para validar o nome completo do cliente é realmente fazer a validação em cada termo da lista .split(). No entanto, existem outras formas de resolver esse problema.

Uma alternativa é utilizar expressões regulares para verificar se o nome contém apenas letras. Você pode usar o módulo re do Python para isso. Aqui está um exemplo de como fazer isso:

import re

def validate_nome(self, nome):
    if not re.match("^[A-Za-z ]+$", nome):
        raise serializers.ValidationError("Não inclua números no nome.")
    return nome

Nesse exemplo, utilizamos a função re.match() para verificar se o nome contém apenas letras e espaços em branco. A expressão regular "^[A-Za-z ]+$" significa que o nome deve começar e terminar com uma letra maiúscula ou minúscula, e pode conter espaços em branco no meio.

Dessa forma, se o nome contiver algum caractere que não seja uma letra ou espaço em branco, a validação irá falhar e será gerada a mensagem de erro.

Espero que essa solução seja útil para você! Se tiver mais alguma dúvida, é só me dizer.

Grande abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.