2009-02-23 67 views
1

我想知道當用戶模型擴展/子分類和共享並在多個應用程序中使用此共享用戶模型時常見的項目/應用程序結構是什麼。Django項目結構,推薦結構跨應用共享擴展認證「用戶」模型?

我想在多個應用程序中引用相同的用戶模型。 我還沒有建立登錄界面,所以我不知道它應該如何適應在一起。

下想到:

project.loginapp.app1 
project.loginapp.app2 

是否有這種情況常見的模式? 登錄最好是由「登錄應用程序」處理?

與此問題類似,但更具體。 django application configuration

UPDATE

澄清我上面的用例。 我想添加字段(擴展或子類?)到現有的認證用戶模型。然後在多個應用程序中引用該模型。

+0

你也許應該加上「django」標籤... – Tiago 2009-02-23 03:38:29

+0

downvoted,有趣。有沒有更好的方式來處理使用用戶模型進行擴展? – monkut 2009-02-26 00:54:52

+0

你不應該改變這個問題。更好地添加一個新的。編輯是澄清/更新,而不是運行交談 – Javier 2009-02-26 17:55:22

回答

6

爲什麼要擴展用戶?請澄清。

如果您要添加有關用戶的更多信息,則無需推出自己的用戶和身份驗證系統。 Django的這個版本非常穩固。用戶管理位於django.contrib.auth中。

如果您需要自定義存儲的與用戶的信息,首先定義一個模型,如

class Profile(models.Model): 
    ... 
    user = models.ForeignKey("django.contrib.auth.models.User", unique=True) 

,然後設置

AUTH_PROFILE_MODULE = "appname.profile" 

在你的settings.py

的優勢設置這可以讓你在你的意見中使用這樣的代碼:

def my_view(request): 
    profile = request.user.get_profile() 
    etc... 

如果您嘗試爲用戶提供更多方式進行身份驗證,您可以添加一個auth後端。擴展或重新實現django.contrib.auth.backends。ModelBackend並在settings.py中將其設置爲 AUTHENTICATION_BACKENDS。

如果您想要使用不同於django提供的權限或組概念,那麼沒有任何東西可以阻止您。 Django僅在django.contrib.admin(我知道)中使用這兩個概念,並且您可以自由地爲這些主題使用其他一些概念,只要您認爲合適。

3

你應該先檢查contrib.auth模塊滿足您的需求,讓你不必重新發明輪子:

http://docs.djangoproject.com/en/dev/topics/auth/#topics-auth

編輯:

檢查這個片段,創建一個UserProfile創建新用戶後。

def create_user_profile_handler(sender, instance, created, **kwargs): 
    if not created: return 

    user_profile = UserProfile.objects.create(user=instance) 
    user_profile.save() 

post_save.connect(create_user_profile_handler, sender=User) 
2

我認爲'項目/應用'的名字是嚴重選擇。它更像是「網站/模塊」。例如,一個應用程序可以非常有用,而不具有視圖。

檢查YouTube上的2008 DjangoCon talks,特別是關於reusable apps的那個,它會讓你覺得如何構建項目完全不同。