gpt4 book ai didi

python - 架构 - 能够在 Django 中更改电子邮件地址(主要用户 ID)

转载 作者:搜寻专家 更新时间:2023-10-30 23:37:34 25 4
gpt4 key购买 nike

目前我的用户表是这样的——(所有字段都不为空)

display_name  = CharField                  # string
email_address = EmailField (primary key) # string
password = CharField # string

但是,我决定添加额外的功能并允许用户更改他们的电子邮件地址。

流程是这样的

enter image description here

有没有人知道如何做到这一点?

目前我在想类似的事情

display_name  = CharField                  # string
email_address = EmailField (primary key) # string
password = CharField # string
pending_email = EmailField (unique) # string

在替换 email_address 中的旧电子邮件地址之前,只需将新电子邮件地址保存在 pending_email 中即可

但显然这远非完美(例如 pending_email 唯一约束不涵盖 ​​email_address)

我考虑过就这样保留它并使用 AJAX 查询对数据库执行更多选择,以检查所需的新电子邮件地址是否已经存在于 email_address 中,然后再将其输入 pending_email 但这似乎仍然容易受到竞争条件和糟糕的用户体验的影响,而且对数据库不是很友好。

最佳答案

这种情况下的标准做法是为电子邮件地址创建一个单独的表。这允许用户在给定时间拥有多个电子邮件地址,并且可以将其中一个标记为默认地址。

这就是django-allauth的 EmailAddress 模型看起来像。事实上,除非您有非常令人信服的理由编写自己的身份验证系统,否则我强烈建议您切换到 django allauth 或任何广泛使用的 django 身份验证/注册系统。

class EmailAddress(models.Model):

user = models.ForeignKey(allauth_app_settings.USER_MODEL,
verbose_name=_('user'))
email = models.EmailField(unique=app_settings.UNIQUE_EMAIL,
max_length=app_settings.EMAIL_MAX_LENGTH,
verbose_name=_('e-mail address'))
verified = models.BooleanField(verbose_name=_('verified'), default=False)
primary = models.BooleanField(verbose_name=_('primary'), default=False)

objects = EmailAddressManager()

关于python - 架构 - 能够在 Django 中更改电子邮件地址(主要用户 ID),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39843618/

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