Sta*_*ato 10 django django-forms
我目前正在使用EmailField表单上的默认属性.我遇到的问题是表单认为无效的电子邮件name@mail.56是有效的.我是否需要validators在此字段上实现自己的功能才能使其正常工作?
我的印象是:
#models.py
email = models.EmailField(max_length=254, blank=False, unique=True,
error_messages={'required': 'Please provide your email address.',
'unique': 'An account with this email exist.'},)
Run Code Online (Sandbox Code Playgroud)
或者:
#forms.py
email = forms.EmailField()
Run Code Online (Sandbox Code Playgroud)
我会照顾这种类型的验证,但似乎并非如此.
ale*_*cxe 16
确实,name@mail.56电子邮件是django的有效电子邮件EmailValidator,看到没有错误:
>>> from django.core.validators import validate_email
>>> validate_email("name@mail.56")
>>>
Run Code Online (Sandbox Code Playgroud)
Django(1.5.1)使用以下正则表达式验证电子邮件地址:
r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*" # dot-atom
# quoted-string, see also http://tools.ietf.org/html/rfc2822#section-3.2.5
r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-\011\013\014\016-\177])*"'
r')@((?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)$)' # domain
r'|\[(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}\]$'
Run Code Online (Sandbox Code Playgroud)
它实际上遵循RFC2822标准.
如果要name@mail.56在验证期间失败,可以创建自己的验证器,并将其添加到EmailField具有内置validate_email验证器的验证器,如下所示:
from django.core.validators import validate_email
from django.core.exceptions import ValidationError
def custom_validate_email(value):
if <custom_check>:
raise ValidationError('Email format is incorrect')
...
email = models.EmailField(max_length=254, blank=False, unique=True, validators=[validate_email, custom_validate_email)
Run Code Online (Sandbox Code Playgroud)
而且,仅供参考,您可以随时在django票务系统中提交票证或在django IRC频道上询问有关问题(irc://irc.freenode.net/django).
另请参阅:编写验证器.
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
8430 次 |
| 最近记录: |