Bueno, este es bastante obvio para todos los que usan Django y los novatos suelen preguntarlo, pero me gustaría dejarlo en claro y analizar si hay otras formas de hacerlo. El método más extendido y conveniente ahora es almacenar correo electrónico en el campo nombre de usuario como Django 1.2 permite "@", "_" y "-" caracteres, pero de esta manera tiene las siguientes cuestiones:Correo electrónico como nombre de usuario en Django
- la peor de todas: campo de nombre de usuario está restringido por la propiedad
max_length=30
, que es ridículamente pequeña para los correos electrónicos. Incluso si anula la validación de formulario, DB tendrávarchar(30)
en lugar deEmailField
varchar(75)
a menos que modifique su tabla manualmente. - Necesita almacenar sus datos de correo electrónico tanto en el nombre de usuario como en el campo de correo electrónico para que
User.email_user()
funcione. Creo que hay otros lugares cuando se usaUser.email
. - Error de lectura del código. Claro, otros djangonautas saben acerca de esta trampa, pero tratar el campo llamado 'nombre de usuario' (especialmente cuando todavía hay un campo de correo electrónico) como el correo electrónico obviamente hace que tu código sea menos comprensible.
El otro enfoque podría ser la autenticación mediante email
campo pasando en su sistema backend de autenticación como tal, pero todavía tiene problemas:
authenticate(self, email=None, password=None)
User.email
no tieneunique=True
propiedad, lo que significa que su base de datos no tendrá índice, lo que hace que sus búsquedas por correo electrónico sean lentas.- Tiene que tratar con el campo
username
, que tieneunique=True
, quitándolo completamente de su tabla o alterándolo para permitir NULL y eliminando el índice.
Reanudando, ambos caminos son malos y requieren que el código específico de DB se ejecute después de syncdb, lo cual es inaceptable si necesita una aplicación independiente de DB.
Pregunta interesante, me gustaría saber cómo usar los correos electrónicos como nombres de usuario en Django también ;-) – gruszczy