2010-12-12 65 views
1

au lieu d'un fantaisie username, il serait préférable pour mon site web d'avoir un nom d'utilisateur normalisé sous la forme first_name.last_name.Django: faire un nom d'utilisateur propre avec first_name.last_name

Il est simple de créer le nouvel utilisateur avec ce genre de nom d'utilisateur

mais quelle est la meilleure façon de nettoyer les champs afin qu'ils contiennent:

  1. sans espaces ex: Théodore de Banville
  2. pas accents ex: Raphaël LeBlond
  3. tous les autres caractères problématiques

Je pensais d'utiliser re et unidecode:

username = re.sub(r"\s+", "", username).lowercase 
username = unidecode(username) 

mais c'est enought?

EDIT: voici ma solution actuelle:

  fname = unicode(self.cleaned_data['first_name']) 
      fname = unidecode(fname) 
      fname = slugify(fname) 
      name = unicode(self.cleaned_data['last_name']) 
      name = unidecode(name) 
      name = slugify(name) 
      username = fname + "." + name 
+0

N'oubliez pas que vous devrez les rendre uniques à un moment donné, lorsque le second John Smith s'inscrit. – Spacedman

Répondre

1

C'est la plupart du temps ce slugify() fait, mais l'utilisation de unidecode() est une énorme amélioration. Le seul changement que je ferais est d'appliquer d'abord unidecode(), puis supprimer les espaces.