2012-08-13 22 views
6

給定一個電子郵件地址(例如:[email protected]),如何驗證域(「example.com」)是否包含在給定的域列表中。如果域(「example.com」)不在指定的列表中,則表單應該引發某種錯誤。如何在表單中驗證電子郵件地址的域名?

這是我在forms.py

class UserCreationFormExtended(UserCreationForm): 
    email = forms.EmailField(required=True) 

    class Meta: 
     model = User 
     fields = ("username", "email", "password1", "password2",) 

    def clean_email(self): 
     data = self.cleaned_data['email'] 
     domain = data.split('@')[1] 
     domain_list = ["gmail.com", "yahoo.com", "hotmail.com",] 
     if domain not in domain_list: 
      raise forms.ValidationError["Please enter an Email Address with a valid domain"] 
     return data 

    def save(self, commit=True): 
     user = super(UserCreationFormExtended, self).save(commit=False) 
     user.email = self.cleaned_data["email"] 
     if commit: 
      user.save() 
     return user 

到目前爲止,有了這個代碼,我得到錯誤「‘類型’對象有沒有屬性‘的GetItem’」可追溯至行「在我的代碼中raise forms.ValidationError [...]」。

任何人都可以看到我做錯了什麼?謝謝您的幫助!

回答

3

你需要在你raise線使用(),而不是[],像這樣:

raise forms.ValidationError("Please enter a valid Penn Email Address") 
+3

哇, 我是個白癡。謝謝! – goelv 2012-08-13 18:24:18

+1

@goelv:請接受答案。 – RanRag 2012-08-13 19:21:56

2

我覺得行了...

raise forms.ValidationError["Please enter an Email Address with a valid domain"] 

應該

raise forms.ValidationError("Please enter an Email Address with a valid domain")