Ok, questo è abbastanza ovvio per tutti quelli che usano Django e vengono spesso richiesti dai neofiti, ma vorrei chiarire e discutere se ci sono altri modi per farlo. L'approccio più diffuso e conveniente è ora di archiviare e-mail nel campo nome utente come Django 1.2 permette di "@", "_" e "-" caratteri, ma in questo modo ha seguenti problemi:Email come username in Django
- Il peggiore: campo nome utente è limitato dalla proprietà
max_length=30
, che è ridicolmente piccola per le e-mail. Anche se si esegue l'override della convalida del modulo, DB avràvarchar(30)
anzichéEmailField
varchar(75)
a meno che non si modifichi manualmente la tabella. - È necessario memorizzare i dati di posta elettronica sia nel nome utente che nel campo di posta elettronica per rendere operativo
User.email_user()
. Penso che ci siano altri posti quando viene usato loUser.email
. - Errore di leggibilità del codice. Certo, altri Djangonauti sanno di questo trabocchetto, ma il campo di trattamento chiamato 'username' (specialmente quando c'è ancora un campo di posta elettronica) come email ovviamente rende il tuo codice meno comprensibile.
L'altro approccio potrebbe essere l'autenticazione utilizzando email
campo passando al tuo backend di autenticazione in questo modo, ma ha ancora problemi:
authenticate(self, email=None, password=None)
User.email
non haunique=True
proprietà, il che significa che il tuo DB non avrà indice, rendendo le tue ricerche via email lente come l'inferno.- Devi occuparti del campo
username
, che haunique=True
, rimuovendolo completamente dalla tabella o modificandolo per consentire NULL e rimuovere l'indice.
Riprendendo, in entrambe le direzioni sono il male e richiedono il codice DB-specifiche da eseguire dopo syncdb, il che è inaccettabile se avete bisogno di un'applicazione DB-indipendente.
Domanda interessante, mi piacerebbe sapere come usare le e-mail come nomi utente anche in Django ;-) – gruszczy