如何在表单中验证电子邮件地址的域?

Posted

技术标签:

【中文标题】如何在表单中验证电子邮件地址的域?【英文标题】:How to validate domain of email address in form? 【发布时间】:2012-08-10 00:30:02 【问题描述】:

给定一个电子邮件地址(例如:goelv@example.com),我如何验证该域(“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

使用此代码,我收到错误“'type' object has no attribute 'getitem'”,该错误可追溯到我的“raise forms.ValidationError[...]”行代码。

谁能看到我做错了什么?感谢您的帮助!

【问题讨论】:

【参考方案1】:

您需要在raise 行中使用() 而不是[],如下所示:

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

【讨论】:

【参考方案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")

【讨论】:

以上是关于如何在表单中验证电子邮件地址的域?的主要内容,如果未能解决你的问题,请参考以下文章

用户验证下降百分比

如何从电子邮件地址 ArrayList 中删除重复的域电子邮件地址

当同一页面上有多个使用同一个类时,如何验证电子邮件提交表单?

Symfony2 - 如何验证控制器中的电子邮件地址

如何使用 php 验证电子邮件地址? [复制]

AWS SES PHP SDK 请求需要来自经过验证的域?