1
resposta

Erro nomes iguais

Teria algum problema utilizar o username como o e-mail cadastrado para evitar o erro dos nomes iguais?

1 resposta

Oii Luiz, como você está?

Peço desculpas pela demora em obter um retorno.

Não tem problema algum em usar o e-mail como username, no entanto, o recomendável é que tenha um username e caso esse username já exista na base de dados, você pode sugerir outros ou então, retornar ao usuário que aquele username já está em uso, como foi mostrado na aula.

Essa técnica de sugestões de username é muito utilizada em redes sociais, como por exemplo: twitter, instagram, dentre outros. A implementação de uma lógica que atenda esse requisito consiste em capturar todos os usernames existentes no banco e gerar username diferentes dos existentes, seja concatenando números, letras, underscores, dentre outros. Abaixo, uma função que pode ser adicionada na view.py de usuários para cumprir com esse objetivo:

def gerador_de_usernames(username):
    quantidade_de_sugestao = 0
    contador = 0
    usernames_existentes = User.objects.only("username")

    while quantidade_de_sugestao < 3:
        possivel_username = f"{username}{contador}"
        for user in usernames_existentes:
            if user.username == possivel_username:
                break
        else:
            quantidade_de_sugestao += 1
            yield possivel_username
        contador += 1

Já na função de cadastro podemos retornar essas sugestões quando o username já estiver em uso:

        if User.objects.filter(username=nome).exists():
            sugestao_de_usernames = [username for username in gerador_de_usernames(nome)]
            messages.error(request, f'Nome de usuário já cadastrado. Sugestões: {(", ".join(sugestao_de_usernames))}')
            return redirect('cadastro')

Como resultado, teremos algo similar ao apresentado abaixo:

Imagem com fundo branco, onde possui um retângulo vermelho escrito: Nome de usuário já cadastrado. Sugestões: rafael0, rafael1, rafael2

Vale ressaltar também, que na aplicação é mostrado “Nome Completo”, porém, essa label é referente ao “Nome de Usuário” e trocar esse rótulo pode ajudar o usuário a compreender melhor o que é pedido, pois caso o usuário adicione o nome completo, pode ser custoso escrevê-lo posteriormente. O username serve como um “apelido” para evitar escritas longas.

Qualquer dúvida fico à disposição.

Abraços e bons estudos!

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