Пользовательский вход в систему в Django

Новичок Django здесь.

Я записал упрощенную форму входа в систему, которая берет электронную почту и пароль. Это работает отлично, если и электронная почта и пароль предоставляются, но если любой отсутствует, я получаю исключение KeyError. Согласно django документации этого никогда не должно происходить:

По умолчанию каждый Полевой класс предполагает, что значение требуется, поэтому при передаче пустого значения - или Ни один или пустая строка ("") - затем не убирают (), повысит исключение 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
5
задан mgs 30 May 2010 в 16:15
поделиться