我目前正在與Django合作,我必須爲用戶提供註冊和登錄的可用性。 我已經閱讀了許多文檔,並且每一個都推薦擴展用戶模型。 是否有限制擴展用戶模型? 我是否必須構建自己的應用程序或擴展用戶模型?是否重寫Django中的用戶模型?
回答
django-registration的好處在於它在收集足夠的信息以註冊用戶(允許他們登錄到您的系統)和收集關於該用戶的其他信息Profile,例如性別,dob等 這個第二點可以用很多不同的方式完成,django-registration的作者James Bennet也創作了django-profiles這是一個單獨的應用程序,允許您靈活地構建必需的字段構成用戶配置文件。
如果你想推出你自己的配置文件解決方案,那麼我不會推薦實際擴展(在對象繼承意義上)的Django用戶模型,但簡單地指定一個額外的模型中的外鍵關係,將保存所有的個人資料字段,則可以從任何用戶實例跟隨與此配置文件模型的反向關係。
例如:
class Profile(models.Model):
user = models.ForeignKey(User)
nickname = models.CharField(max_length=255)
>>> user = User.objects.create_user(username='a_user', email='[email protected]', password='password')
>>> profile = Profile.objects.create(user=user, nickname='example')
>>> user.profile_set.all()[0].nickname #follow the reverse relationship from the fk in Profile
example
這樣的回答變成了一個相當的敘述,所以這裏的短部分:
這個工作很適合我,但你需要的,如果你想要做額外工作用戶子類,而不是您的RequestContext實例上的auth.User。
TLDR:
我已經在過去與用戶名中切換到基於電子郵件的登錄的目標,做到了這一點。這增加了一些開銷,因爲它還需要一個新的auth後端。另一方面,替換auth後端將導致RequestContext.user和HTTPRequest.user成爲自定義User子類的實例。
根據我的經驗,在使用contrib.admin時,擴展User的粘性部分來了。
訣竅是,當未經身份驗證/未經授權的用戶試圖訪問某個管理網址時,contrib.admin會使用其自己的登錄視圖。當我登錄到不同的登錄頁面時,這一點很明顯,但如果您還沒有覆蓋這些登錄頁面,則可能不那麼明顯。雖然這也使用了標準的auth後端,所以我的RequestContexts以auth.User實例而不是我的子類結束。
解決方案是重寫AdminSite並定義一個新的登錄方法。我只是重定向到了我的前端登錄頁面,登錄頁碼爲?next
。
而不是通過所有這些跳火圈,一個簡單的解決方法就是離開auth.User的上下文,並在你的用戶子類中定義一個類方法:
@classmethod
def for_auth_user(cls, auth_user):
return cls.objects.get(user_ptr_id=auth_user.id)
這只是一個額外的分貝相互撞擊頁面加載。您甚至可以在每個請求開始時編寫一箇中間件進行交換。
在這個時候,我推薦使用通過dev版本的Django 1.5功能。 1.5應該在11月底發佈(如果我沒有弄錯)。
有了它你就有了修改默認用戶模型和所有東西的新特定方式,所以在定製模型時(如果它是你需要做的),你可以保持很多默認優點:
https://docs.djangoproject.com/en/dev/topics/auth/#customizing-the-user-model
Django的1.5將帶來定製用戶模式:) https://docs.djangoproject.com/en/dev/releases/1.5-alpha-1/#configurable-user-model
- 1. 改寫Django用戶模型
- 2. 如何重寫Django 1.5中用戶模型的__unicode__方法
- 3. 如何重寫Django中的默認用戶模型字段?
- 4. 是否可以重寫django模型上的.objects?
- 5. 子模型中的Django用戶模型
- 6. 您是否應該在Django 1.9中重新命名自定義用戶模型?
- 7. 如何讓Django窗體重寫模型?
- 8. 重寫Django的模板{%用於%}到模型方法
- 9. Django是否在使用模型的數據庫中實現用戶權限?
- 10. Django中的自定義用戶模型?
- 11. Django中用戶特定的模型
- 12. django - 用戶在另一個模型中的用戶類型
- 13. 擴展用戶模型Django
- 14. Django:創建用戶模型
- 15. Django模型:用戶ID
- 16. 擴展Django用戶模型
- 17. Django擴展模型。用戶
- 18. 擴展django用戶模型
- 19. Django用戶模型Oauth
- 20. Django的用戶模型是不夠好,在生產中使用
- 21. Sails.js的模型是否具有反向引用能力,如Django中的模型..?
- 22. Django:用戶用戶模型未加載
- 23. django重構模型
- 24. 在Django中擴展social_auth用戶模型
- 25. 用戶模型繼承和Django中
- 26. 在Django中擴展用戶模型
- 27. 在Django中擴展用戶模型
- 28. 我可以在django中重寫模型方法的優點嗎?
- 29. 如何重寫Django中模型的__new__元類方法
- 30. Django模型查詢是否正確?
你只是希望讓用戶註冊和登錄? Django具有內置的表單和視圖:https://docs.djangoproject.com/en/dev/topics/auth/ – Tom