Джанго новичок здесь.
Я написал упрощенную форму входа в систему, которая принимает электронную почту и пароль. Он отлично работает, если указаны и адрес электронной почты, и пароль, но если их нет, я получаю исключение KeyError. Согласно документации django, этого никогда не должно происходить:
По умолчанию каждый класс Field предполагает, что значение является обязательным, поэтому если вы передадите пустое значение - None или пустую строку ("") - тогда clean () вызовет исключение ValidationError
Я пытался написать свои собственные валидаторы для полей (clean_email и clean_password), но это не работает (т.е. я получаю исключение KeyError). Что я делаю не так?
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