簡體   English   中英

架構 - 能夠在 Django 中更改電子郵件地址(主要用戶 ID)

[英]Schema - Ability to change email address (primary user id) in Django

目前我的用戶表看起來像這樣 - (所有字段都不為空)

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

但是,我決定添加附加功能並允許用戶更改他們的電子郵件地址。

流程是這樣的

在此處輸入圖片說明

有沒有人對如何做到這一點有任何想法?

目前我正在考慮類似的事情

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM