Django 表单 EmailValidation 不起作用

Dig*_*ble 0 django django-forms django-validation

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

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

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

我在这里做错了什么?

rne*_*ius 6

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

在这种情况下, Awhitelist不是“阻止除该域部分之外的所有内容”的解决方案。相反,它whitelist是一个域部分,否则将被 Django 的EmailValidator标记为无效。

例如,默认白名单设置为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
Run Code Online (Sandbox Code Playgroud)