好吧,對於每個使用Django並經常被新手們問到的人來說,這一點非常明顯,但我想澄清一下,並討論是否有其他方法可以做到這一點。最廣泛和最方便的方法現在是存儲電子郵件的用戶名字段的Django 1.2允許「@」,「_」和「 - 」字符,但這種方式有以下問題:在Django中用電子郵件作爲用戶名
- 最糟糕的一個:用戶名場受到
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
屬性,這意味着你的數據庫不會有索引,通過電子郵件查找速度就像地獄一樣慢。- 您必須處理
username
字段,該字段有unique=True
,方法是將其從表中完全刪除或將其更改爲允許NULL和刪除索引。
恢復,這兩種方式都是邪惡的,需要在syncdb之後執行特定於DB的代碼,如果您需要與DB無關的應用程序,這是不可接受的。
很酷的問題,我想知道如何在Django中使用電子郵件作爲用戶名;-) – gruszczy 2010-08-23 11:23:14