2013-02-27 117 views
0

我對Django很陌生,並且在中型項目上尋找一些建議。我們的辦公室管理員是一回事,但我們的用戶也可以在線登錄並看到類似(更有限,但大部分相同)的界面。用戶的單獨管理網站

問題是,用戶的電子郵件是用戶名,電子郵件不必是唯一的(但密碼必須出於您理解的原因)。貧民窟?是。但這是他們所期望的。

是否有可能創建此第二個界面以及偏離傳統用戶名登錄? Django 1.5s定製用戶模型在這裏爲我做了什麼嗎?是否有可能利用兩種用戶模式 ​​- 一種用於管理員,一種用於用戶?

最後,如果我完全走錯方向,請告訴我。這是我以前問過的一個問題的後續,但我忘記了一些細節。

編輯:雖然我討厭這樣做,我只是單獨編碼成員區域。登錄出現更多的怪異現象,所以我認爲這將是最簡單的解決方案,即使不是非常乾燥。

+1

是的,你是在一個錯誤的方向完全沒有唯一的用戶名,但唯一的密碼! – almalki 2013-02-27 08:45:20

回答

1
  1. 有兩個管理界面可能是愚蠢的。 Django的管理員支持強大的用戶權限。

  2. 保持用戶名的唯一性,並使用電子郵件身份驗證後端。這可以讓用戶使用他們的電子郵件地址,如果他們想。由於至少在1.4,電子郵件地址不一定是唯一的,你很清楚。

  3. 這裏有一個簡單的電子郵件身份驗證後端:

    from django.contrib.auth.backends import ModelBackend 
    from django.contrib.admin.models import User 
    
    class EmailAuthBackEnd(ModelBackend): 
        def authenticate(self, email=None, password=None,**kwargs): 
         try: 
          user = User.objects.get(email=email) 
          if user.check_password(password): 
           return user 
          return None 
         except User.DoesNotExist: 
          return None 
    
  4. 上面加入了一個名爲backends.py文件在您的應用程序之一,然後添加到您的settings.py:

    AUTHENTICATION_BACKENDS = AUTHENTICATION_BACKENDS + ('app.backends.EmailAuthBackEnd',) 
    
  5. 在整個唯一密碼的事情...這是棘手的處理。您可以繼承Django的用戶模型,並將密碼更改爲唯一的字符串,或者您可以手動修補PSQL來強制實施該限制。或者你可能是懶惰的,假設密碼將被分配,爲每個用戶分配一個隨機的用戶名,在知識中你可以隨時登錄和'修復'問題賬戶。

0

我建議你允許用戶保留其當前的憑據(這將是從一個可用性點大加),然後調整他們看到這取決於他們來自何處什麼。 django的ModelAdmin有很多方法可以覆蓋。因此,通過模型的基礎模型,你可以做 -

class MyModelAdmin(admin.ModelAdmin): 
    def get_form(self, request, obj=None, **kwargs): 
     self.exclude = [] 
     if request.META(REMOTE_ADDR) not in [# add list of internal ip's here] 
      self.exclude.append('field_to_hide') 
     return super(MyModelAdmin, self).get_form(request, obj, **kwargs) 

如文檔例子here。 (也可以看一下http header的列表here,以瞭解如何進行檢查)

如果要更改主管理菜單上可用的對象列表,請查看覆蓋AdminSite ,以添加您自己的get_urls()方法,該方法提供了與上面建議的個人get_form方法類似的功能。