Django 表单 EmailValidation 不工作

Django forms EmailValidation not working

我一直在研究这个问题,但似乎没有太多关于这个的解释。

...
class RangerRegistrationForm(RegistrationFormUniqueEmail):
    email = forms.EmailField(label=_("Email Address"), validators=[EmailValidator(whitelist=['gmail.com'])])
...

这是我的脚本部分,我在其中检查用户是否提供了 gmail 帐户。不幸的是,只要它是有效的电子邮件,它就会始终通过检查。

我做错了什么?

恭喜!您在 Django 中发现了一个错误。

EmailValidatorthis code

if (domain_part not in self.domain_whitelist and
        not self.validate_domain_part(domain_part)):
    ...

如果电子邮件的域部分有效,则检查 self.domain_whitelist 将被忽略。

这不是 Django 中的错误(重新阅读@catavaran 的回答中发布的源代码 link)。

A whitelist 在这种情况下不是 "block everything except for this domain part" 解决方案。相反,whitelist 是一个域部分,否则会被 Django 的 EmailValidator 标记为无效。

例如,default whitelist 设置为 domain_whitelist = ['localhost']...否则无效的 domain_part 被标记为适用于此用例。

要验证电子邮件字段的域部分,您需要编写自己的 clean 函数。类似于:

class RangerRegistrationForm(forms.Form):
    email = forms.EmailField(label=_("Email Address"))

    def clean_email(self):
        submitted_data = self.cleaned_data['email']
        if '@gmail.com' not in submitted_data:
            raise forms.ValidationError('You must register using a Gmail address')
        return submitted_data