0

我種的新Django和我關心我們才能使用多種模型進行驗證爲不同類型的用戶對我們的應用例如,用於客戶使用的客戶模型中,供應商使用供應商模式,也只保留默認的用戶註冊模式,僅供管理使用?如果是這樣,你可以指出我的方向是正確的,它是如何做到的?應該使用哪個軟件包? 有一種方法是我爲每個需要進行身份驗證的模型添加一個外鍵,但這會涉及每個查詢中的連接,這可能會導致性能問題。我需要知道是否有更好的方法。這些自定義模型也可以爲管理面板中的所有權限提供幫助。 專家意見將非常感激。Django的 - 使用多個模型進行驗證

+0

這是很基於意見的。我個人更喜歡使用OneToOne關係創建配置文件模型返回到基本用戶身份驗證模型。這不是唯一的辦法,但IMO是最簡單和最模塊化的。 – souldeux

+0

@souldeux在數據廣泛的應用程序這可能會導致性能問題,因爲它涉及到連接。 –

回答

0

有幾個不同的選項來處理。 也許先查詢the Django-docu。 我已經you'ld喜歡定製,以你的用戶會與郵件地址進行驗證,這裏是前文件上寫的knbkrahul-gupta一個例子:

Django默認的認證上的用戶名和密碼的工作原理領域。電子郵件身份驗證後端將根據電子郵件和密碼對用戶進行身份驗證。

from django.contrib.auth import get_user_model 

class EmailBackend(object): 
    """ 
    Custom Email Backend to perform authentication via email 
    """ 
    def authenticate(self, username=None, password=None): 
     user_model = get_user_model() 
     try: 
      user = user_model.objects.get(email=username) 
      if user.check_password(password): # check valid password 
       return user # return user to be authenticated 
     except user_model.DoesNotExist: # no matching user exists 
      return None 

    def get_user(self, user_id): 
     user_model = get_user_model() 
     try: 
      return user_model.objects.get(pk=user_id) 
     except user_model.DoesNotExist: 
      return None 

將此身份驗證後端添加到AUTHENTICATION_BACKENDS設置。

# settings.py 
AUTHENTICATION_BACKENDS = (
    'my_app.backends.EmailBackend', 
    ... 
) 
+0

我想使用多個模型來認證用戶。那可能嗎? –

+0

@tahir有兩種方法。要麼擴展現有的身份驗證系統,要麼創建一個新的身份驗證系統。 你有可能解釋,你實際打算做什麼? –

+0

我的應用程序將有三個不同的門戶網站,一個是管理,一個爲我們的客戶和一個爲我們的供應商。我想爲每個門戶使用單獨的身份驗證系統。我希望能夠從默認管理員cPanel的權限系統中受益。這可能嗎? –