Django newbie ici. J'ai écrit un formulaire de connexion simplifié qui prend l'email et le mot de passe. Cela fonctionne très bien si le courrier électronique et le mot de passe sont fournis, mais si l'un ou l'autre est manquant, j'obtiens l'exception KeyError. Selon la documentation de django, cela ne devrait jamais arriver:Connexion personnalisée en Django
Par défaut, chaque classe Field suppose que la valeur est requise, donc si vous transmettez une valeur vide - soit None ou la chaîne vide ("") - alors nettoyez() déclenche une exception ValidationError
J'ai essayé d'écrire mes propres validateurs pour les champs (clean_email et clean_password), mais il ne fonctionne pas (c.-à-je obtenir exception KeyError). Qu'est-ce que je fais mal?
class LoginForm(forms.Form):
email = forms.EmailField(label=_(u'Your email'))
password = forms.CharField(widget=forms.PasswordInput, label=_(u'Password'))
def clean_email(self):
data = self.cleaned_data['email']
if not data:
raise forms.ValidationError(_("Please enter email"))
return data
def clean_password(self):
data = self.cleaned_data['password']
if not data:
raise forms.ValidationError(_("Please enter your password"))
return data
def clean(self):
try:
username = User.objects.get(email__iexact=self.cleaned_data['email']).username
except User.DoesNotExist:
raise forms.ValidationError(_("No such email registered"))
password = self.cleaned_data['password']
self.user = auth.authenticate(username=username, password=password)
if self.user is None or not self.user.is_active:
raise forms.ValidationError(_("Email or password is incorrect"))
return self.cleaned_data
Le ['django.contrib.auth.forms.AuthenticationForm'] (http://github.com/jacobian/django/blob/master/django/contrib/auth/forms.py#L54) livré avec django est assez simple et robuste. Si vous n'avez aucun besoin urgent, utilisez-le. – miku
Je m'authentifie par email et mot de passe, pas nom d'utilisateur et mot de passe. – mgs
Plutôt regarder dans quelque chose comme ceci: [Connexion avec des adresses e-mail dans Django] (http://www.davidcramer.net/code/224/logging-in-with-email-addresses-in-django.html) – miku