1

我在我的django項目中需要兩種類型的登錄,其中一個登錄名爲學生,一個登錄名爲教師。擴展用戶模型以創建用戶2模型

我已經瀏覽了Django文檔和其他互聯網資源,並且我已經提出了一個簡單的設計解決方案,但我不確定正反兩面,因爲我對Django仍然很陌生。

解決方案我認爲解決這個問題:

1)對於學生登錄,我已成功集成Django的allauth,它是工作的罰款。

2)現在的老師登錄,我想建立一個模型,如下所示:

class Teacher(models.Model): 
    teacher = models.OneToOneField(User,unique=True) 
    identifier = models.CharField(max_length=128) 
    #other fields 

3)然後兩種形式在這個模型 - 註冊和登錄爲教師和電子郵件驗證形式:在這裏,我以爲我會在成功註冊後創建教師對象和學生對象,但我會設置is_active=False並要求進行電子郵件驗證。驗證成功後,我會設置is_active=True,以便教師能夠成功登錄。

4)避免學生登錄教師部分,教師可以在學生部分登錄:在這裏我有一個標識符字段,以避免已認證的學生在教師部分登錄。

任何人都可以通過提供您對這個解決方案的意見或通過建議一些更好的選擇來幫助我,因爲我仍然在閱讀越來越多的Django文檔。

在此先感謝!

回答

0

您可以創建一個模型「用戶」,並通過將它們添加到組中來定義這些權限。

並且讓你的Django申請教師檢查是否有在教師組中。 在保存添加組的模型之前,您可以創建單獨的表單或基於電子郵件(name.student @或name @)和 進行檢查。

如果您想驗證「用戶」是否提供了正確的電子郵件,那麼保持is_active爲False總是一個好主意。

0

我做了一個應用程序,需要不同的權限級別爲學生,教師和幾個不同的其他用戶類別。我不知道這是否是最好的方法,但我通過創建一個UserProfile來完成,就像Eagllus提到的那樣,它有幾種類別的用戶配置文件。例如:

PROFILE_CHOICES = (
    ('TE', 'Teacher'), 
    ('ST', 'Student'), 
) 

class UserProfile(models.Model): 
    user = models.ForeignKey(User) 
    profile_type = models.CharField(max_length=2, choices=PROFILE_CHOICES) 
    '''other attributes''' 

然後,您可以裝飾您的視圖,以便只有某種類型的用戶才能訪問它們。 我不清楚你在#3中想做什麼。這聽起來像你想要添加用戶作爲老師和學生,但只有通過電子郵件驗證使他們活躍?

我對django-auth不熟悉,但django-registration提供用戶註冊,其中用戶帳戶通過電子郵件激活。這可以爲您節省大量的工作。

+0

其實我試圖通過電子郵件驗證在#3驗證註冊。實際上,我的學生登錄信息從過去四個月起在網上直播,大約有1500個註冊,所以我不想對學生的登錄機制進行任何更改。 UserProfile的這個想法看起來不錯。我正在進一步調查,以便在我的情況下能夠正常工作。謝謝!! – gmfreak