Voici une façon de le faire pour que le nom d'utilisateur et l'adresse électronique soient acceptés:
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth.models import User
class EmailAuthenticationForm(AuthenticationForm):
def clean_username(self):
username = self.data['username']
if '@' in username:
username = User.objects.get(email=username).username
return username
Je ne sais pas s'il existe un paramètre pour définir le formulaire d'authentification par défaut, mais vous pouvez également remplacer l'URL dans urls.py
url(r'^accounts/login/$', 'django.contrib.auth.views.login', { 'authentication_form': EmailAuthenticationForm }, name='login'),