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