Django новичок здесь.Пользовательский логин в Django
Я написал упрощенную форму для входа в систему, которая обрабатывает электронную почту и пароль. Он отлично работает, если поставляются как электронная почта, так и пароль, но если он отсутствует, я получаю исключение KeyError. Согласно документации django это никогда не должно происходить:
По умолчанию каждый класс Field предполагает, что это значение необходимо, поэтому, если вы передаете пустое значение - либо None, либо пустую строку ("") - затем очистите() возбудит исключение 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
['django.contrib.auth.forms.AuthenticationForm'] (http://github.com/jacobian/django/blob/master/django/contrib/auth/forms.py#L54) доставка с помощью django довольно прост и прочен. Если у вас нет насущной необходимости, просто используйте это. – miku
Я аутентифицируюсь по электронной почте и паролю, а не по имени пользователя и паролю. – mgs
Скорее посмотрите на что-то вроде этого: [Вход в систему с адресами электронной почты в Django] (http://www.davidcramer.net/code/224/logging-in-with-email-addresses-in-django.html) – miku