Teria algum problema utilizar o username como o e-mail cadastrado para evitar o erro dos nomes iguais?
Teria algum problema utilizar o username como o e-mail cadastrado para evitar o erro dos nomes iguais?
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:
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!