gpt4 book ai didi

django - 电子邮件作为 Django 中的用户名

转载 作者:行者123 更新时间:2023-12-03 12:59:28 28 4
gpt4 key购买 nike

好的,这个对于每个使用 Django 并且经常被新手问到的人来说是很明显的,但是我想把它说清楚并讨论是否有其他方法可以做到这一点。现在最普遍和方便的方法是将电子邮件存储在用户名字段中,因为 Django 1.2 允许使用“@”、“_”和“-”字符,但这种方式存在以下问题:

  • 最糟糕的一个:用户名字段受max_length=30限制属性(property),这对于电子邮件来说太小了。即使您覆盖表单验证,DB 也会有 varchar(30)而不是 EmailFieldvarchar(75)除非您手动更改表格。
  • 您需要将您的电子邮件数据存储在用户名和电子邮件字段中以制作 User.email_user()在职的。我想还有一些地方当User.email用来。
  • 代码可读性失败。当然,其他 djangonauts 知道这个陷阱,但是将名为“用户名”的字段(尤其是当仍然存在电子邮件字段时)视为电子邮件显然会使您的代码难以理解。

  • 另一种方法是使用 email 进行身份验证。像这样将其传递给您的身份验证后端,但它仍然存在问题:
    authenticate(self, email=None, password=None)
  • User.email没有 unique=True属性,这意味着您的数据库将没有索引,这使您通过电子邮件进行的查找变得非常缓慢。
  • 你必须处理username字段,其中有 unique=True ,通过将其从表中完全删除或将其更改为允许 NULL 并删除索引。

  • 恢复,这两种方式都是邪恶的,并且需要在syncdb之后执行特定于DB的代码,如果您需要独立于DB的应用程序,这是 Not Acceptable 。

    最佳答案

    我已打包django-email-as-username如果您要删除用户名并且只使用电子邮件,这几乎可以满足您的所有需求。

    简要概述如下:

  • 提供用于创建用户的电子邮件身份验证后端和帮助函数。
  • 修补 Django 管理员以处理基于电子邮件的用户身份验证。
  • 覆盖 createsuperuser 命令以仅使用电子邮件创建用户。
  • 将电子邮件身份验证视为不区分大小写。

  • 在后台,用户名是电子邮件的哈希版本,这意味着我们不仅限于 Django 的用户名 30 个字符的限制(只是常规电子邮件的 75 个字符的限制。)

    编辑 :从 Django 1.5 开始,您应该考虑使用自定义用户模型而不是“django-email-as-username”包。

    关于django - 电子邮件作为 Django 中的用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3547024/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com