2011-11-06 165 views
0

我應該在我的表單中寫入認證邏輯來處理用戶登錄嗎?表單身份驗證?

例如,如果帳戶尚未激活,我想向用戶顯示消息。對於這一點,我正在做這樣的事情(太可怕了,我知道):

def login(request): 
    email = request.POST.get('email') 
    password = request.POST.get('password') 

    user = auth.authenticate(email=email, password=password) 

    if user is not None: 
     if user.is_active: 
      auth.login(request, user) 
      # etc 
     else: 
      # send "not activated message" 
    else: 
     # send "not found message" 

它在實現比醜陋了很多,但我會從我最初的嘗試在表單處理保存在互聯網上的Django在我學習表單API之前。

在任何情況下,能夠告訴用戶他們的賬戶如果他們嘗試登錄時都不活躍,這一點很重要,這樣他們至少可以知道下一步該做什麼。表單API似乎是最有意義的:我可以執行簡單的電子郵件地址和密碼驗證,然後在我的表單上執行clean()方法中的實際帳戶激活邏輯驗證,並在發生問題時向他們發送消息。

這樣做有什麼缺點嗎? PS:我知道Django提供了一個登錄視圖和整個九碼,但是我有特定的項目需求,在這個需求中我需要用認證等來調整相當多的東西,所以請不要暗示「使用包含的視圖,「我不能這次。

回答

1

就像你寫的,你可以創建一個登錄表單,您可以在其中添加清潔方法:

class LoginForm(forms.Form): 
    email = ... 
    password = ... 

    def clean(self): 
     user = User.objects.filter(email=self.email) 
     if not user.exists(): 
      raise forms.ValidationError("User does not exists") 
     if not user.is_active: 
      raise forms.ValidationError("This account is not active") 

這是處理這個問題的好辦法。

+0

你是對的,雖然它似乎有點奇怪多餘的執行身份驗證_twice._ –