Olá Antônio, como você está?
Peço desculpas pela demora em obter um retorno.
O backend de autenticação padrão do Django usa o nome de usuário para autenticar o usuário. No entanto, uma forma prática de sanar isso, é usar o e-mail como username no ato do cadastro, 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:
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.
A título de curiosidade, caso ainda sim queira colocar o campo e-mail
como fator principal de autenticação, recomendo a leitura do artigo abaixo que explicita sobre usuários customizados (CustomizeUser
) e elucida sobre campos adicionais na autenticação:
Espero ter ajudado.
Continue mergulhando em conhecimento e não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.
Abraços e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!