【发布时间】:2015-03-12 06:26:43
【问题描述】:
在这个example 中,Django 讨论了使用self.normalize_email(email) 规范化电子邮件地址,其中self 是BaseUserManager。当我搜索“规范化电子邮件”时,这似乎是所有平台的一种做法。我看到了如何做的教程,但没有真正解释它是什么以及它的用途。
【问题讨论】:
在这个example 中,Django 讨论了使用self.normalize_email(email) 规范化电子邮件地址,其中self 是BaseUserManager。当我搜索“规范化电子邮件”时,这似乎是所有平台的一种做法。我看到了如何做的教程,但没有真正解释它是什么以及它的用途。
【问题讨论】:
规范化电子邮件的一个应用是防止多次注册。如果您的应用程序允许公众注册,您的应用程序可能会吸引“不友好”类型,他们可能会尝试使用相同的电子邮件地址多次注册,方法是混合符号、大写和小写字母以制作相同电子邮件地址的变体.
来自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
正如您所见,所有电子邮件都是等效的,因为@ 之后的大小写无关紧要。
【讨论】:
对于电子邮件地址,foo@bar.com 和 foo@BAR.com 是等效的;根据 RFC 规范,域部分不区分大小写。规范化意味着提供规范的表示,以便任何两个等效的电子邮件字符串规范化为同一事物。
comments on the Django method解释:
通过小写域名部分来规范化电子邮件地址。
【讨论】: