Python 之前的django EmailField点@

Python 之前的django EmailField点@,python,django,emailfield,Python,Django,Emailfield,我对django EmailField也有同样的小问题 forms.EmailField(required=True, label="E-mail", widget=forms.TextInput(attrs= 它不接受电子邮件的形式 xx.@xxxxxxx.xxx 它会返回格式不正确的错误消息,但电子邮件正常工作(电子邮件已存在15年)。 我认为问题出在at标志之前 是虫子吗?有什么解决方案可以让它在这类邮件中工作吗 Thx a lot:)在第4.2.1节中,地址的“本地部分”具有以下语法:

我对django EmailField也有同样的小问题

forms.EmailField(required=True, label="E-mail", widget=forms.TextInput(attrs=
它不接受电子邮件的形式

xx.@xxxxxxx.xxx

它会返回格式不正确的错误消息,但电子邮件正常工作(电子邮件已存在15年)。 我认为问题出在at标志之前

是虫子吗?有什么解决方案可以让它在这类邮件中工作吗

Thx a lot:)

在第4.2.1节中,地址的“本地部分”具有以下语法:

Local-part     = Dot-string / Quoted-string
                 ; MAY be case-sensitive


Dot-string     = Atom *("."  Atom)

Atom           = 1*atext
我的解释是,一个原子必须至少有一个字符,点字符串是一个或多个原子,原子之间有点,局部部分是点字符串或带引号的字符串

如果我的解释正确,那么原子必须始终紧跟在一个点之后,您的电子邮件地址正式无效,例如,一行中的两个点也是无效的

尽管像GMail这样的服务器选择只过滤掉本地部分的所有点并接受这些地址,但这并不意味着它们正式有效


引用本地部分(
“xx.”@xxxx.xxx
)应该可以,但您也可以编写自定义验证器和您自己的EmailField子类。

EmailField
是一个检查值是否为有效电子邮件地址的
字符域。它用于验证输入

forms.EmailField(required=True, label="E-mail", widget=forms.TextInput(attrs=
EmailValidator
类按以下行拆分您的电子邮件:

user_part, domain_part = value.rsplit('@', 1) 
因此,
用户部分
@
之前的部分。和
EmailValidator
检查此正则表达式对其的验证:

user_regex = re.compile(
    r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*$"  # dot-atom
    r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-\011\013\014\016-\177])*"$)',  # quoted-string
    re.IGNORECASE)

正如你所看到的那样,在
@
之前不可能有
\.
,有一个
\.
在它之后是
[-!!\$%&'*+/=?^ `{}~0-9A-Z]+
!所以没有机会使用
\。

正如其他人所说,这可能不是一个有效的电子邮件地址。但作为一种解决办法,你可以做这样的事情。我还没有把正则表达式放进去,但希望您能理解:

from django.core.validators import EmailValidator
from django.db import models

class MyEmailValidator(EmailValidator):
    user_regex = re.compile('ALTERED REGULAR EXPRESSION')

class MyModel(models.Model):
    forms.EmailField(required=True, label="E-mail", validators=[MyEmailValidator()])

您可以查看django.core.validators.EmailValidator,了解如何构建正则表达式。

如果它是一个bug,您应该这样做。我会等其他人先插话。根据标准,这个位置上的一个点可能实际上是无效的,即使它对你总是有效的。有人将不得不通过RFC2821左右进行搜索,并确定这是否是Django中的一个bug。您是否可以添加您得到的
错误