【发布时间】:2011-04-02 14:23:50
【问题描述】:
好的,这个对于每个使用 Django 并且经常被新手问到的人来说是很明显的,但是我想澄清一下并讨论是否有其他方法可以做到这一点。现在最普遍和最方便的方法是将电子邮件存储在用户名字段中,因为 Django 1.2 允许使用“@”、“_”和“-”字符,但这种方式存在以下问题:
- 最糟糕的是:用户名字段受
max_length=30属性的限制,这对于电子邮件来说太小了。即使您覆盖表单验证,除非您手动更改表,否则 DB 将使用varchar(30)而不是EmailField的varchar(75)。 - 您需要将电子邮件数据存储在用户名和电子邮件字段中,以使
User.email_user()正常工作。User.email使用时,我认为还有一些其他的地方。 - 代码可读性失败。当然,其他 djangonauts 知道这个陷阱,但是将名为“用户名”的字段(尤其是仍然存在电子邮件字段时)视为电子邮件显然会使您的代码更难理解。
另一种方法可能是使用email 字段进行身份验证,方法是将其传递给您的身份验证后端,但仍然存在问题:
authenticate(self, email=None, password=None)
-
User.email没有unique=True属性,这意味着您的数据库将没有索引,从而使您通过电子邮件查找的速度非常慢。 - 您必须处理具有
unique=True的username字段,将其从表中完全删除或更改为允许NULL 并删除索引。
恢复,这两种方式都是邪恶的,需要在syncdb之后执行特定于DB的代码,如果你需要独立于DB的应用程序,这是不可接受的。
【问题讨论】:
-
很酷的问题,我也想知道如何在 Django 中使用电子邮件作为用户名 ;-)
标签: django email authentication