在此example中,Django讨论了使用self.normalize_email(email)
self
BaseUserManager
{{1}}来规范化电子邮件地址的问题。当我搜索“规范化电子邮件”时,它似乎是所有平台上的一种做法。我看到了如何做的教程,但没有真正解释它是什么以及它用于什么。
答案 0 :(得分:9)
对于电子邮件地址,foo@bar.com
和foo@BAR.com
是等效的;根据RFC规范,域部分不区分大小写。规范化意味着提供规范表示,以便任何两个等效的电子邮件字符串规范化为同一事物。
comments on the Django method解释:
通过小写其部分域名来规范化电子邮件地址。
答案 1 :(得分:0)
一种标准化电子邮件的应用程序是防止多次注册。如果您的应用程序允许公众注册,则您的应用程序可能会吸引“不友好的”类型,并且他们可能会尝试通过使用符号,大小写混合使用相同的电子邮件地址来多次注册同一电子邮件地址,以制作相同电子邮件地址的变体
在Django's repository中,normalize_email
的文档字符串如下:
通过小写其域部分来规范化电子邮件地址。
此方法的作用是小写电子邮件的域部分,因此该部分为case insensitive,因此请考虑以下示例:
>>> from django.contrib.auth.models import BaseUserManager
>>> BaseUserManager.normalize_email(user@example.com)
user@example.com
>>> BaseUserManager.normalize_email(user@EXAMPLE.COM)
user@example.com
>>> BaseUserManager.normalize_email(user@example.COM)
user@example.com
>>> BaseUserManager.normalize_email(user@EXAMPLE.com)
user@example.com
>>> BaseUserManager.normalize_email(user@ExAmPlE.CoM)
user@example.com
您会看到所有电子邮件都是等效的,因为@
之后的大小写是无关紧要的。