Django新手在这里。在Django自定义登录
我写了简化的登录表单,它需要电子邮件和密码。如果提供了电子邮件和密码,它会很好用,但如果缺少任何一个,我会得到KeyError异常。根据django的文档,这绝不应该发生:
默认情况下,每个Field类都假定该值是必需的,所以如果您传递一个空值 - 无或空字符串(“”) - 然后清理()会引发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一起发货的['django.contrib.auth.forms.AuthenticationForm'](http://github.com/jacobian/django/blob/master/django/contrib/auth/forms.py#L54)是非常简单和强大。如果你没有迫切的需求,那就用它吧。 – miku 2010-05-30 16:21:47
我通过电子邮件和密码进行身份验证,而不是用户名和密码。 – mgs 2010-05-30 16:24:52
相反看看这样的事情:[在Django中使用电子邮件地址登录](http://www.davidcramer.net/code/224/logging-in-with-email-addresses-in-django.html) – miku 2010-05-30 16:29:29