2012-08-23 41 views
3

我有一個文件forms.py,我定義了所有的表單。我需要在我的一個表單域上進行密碼驗證。訪問request.user outside views.py

在我forms.py

class ChangePasswordForm(forms.Form): 
    old_password = forms.CharField(widget=forms.PasswordInput) 
    new_password= forms.CharField(widget=forms.PasswordInput) 
    new_password_again= forms.CharField(widget=forms.PasswordInput) 

    def clean_old_password(self): 
     data = self.cleaned_data['old_password'] 
     if data != currently_logged_in_user.password: 
      raise forms.ValidationError("Password Incorrect") 

     return data 

我需要訪問在當前登錄的用戶,所以我可以用currently_logged_in_user.password的驗證,但我目前在forms.py工作不views.py,所以我不知道該怎麼做所以?請幫助

回答

2

您需要將用戶從視圖傳遞到您的表單。你可以做到這樣!

views.py

my_form = ChangePasswordForm(user=request.user, data=request.POST) 
... 

forms.py

class ChangePasswordForm(forms.Form): 
    ... 

    def __init__(self, *args, **kwargs): 
     self.user = kwargs.pop('user', None) 
     super(ChangePasswordForm, self).__init__(*args, **kwargs) 

    def clean_old_password(self): 
     old_password = self.cleaned_data['old_password'] 
     if not self.user.check_password(old_password) 
      raise forms.ValidationError("Password Incorrect") 
     return old_password 
+0

數據= self.user.password始終計算爲True值,所以我用AUTH =身份驗證( username = self.user.username,password = data)。它工作謝謝 – flexxxit

+0

是的,'self.user.password'將是散列值,包括鹽。 [從文檔](https://docs.djangoproject.com/en/1.4/topics/auth/#manually-managing-a-user-s-password),「如果您想通過手動驗證用戶將明文密碼與數據庫中的哈希密碼進行比較,使用便利函數'django.contrib.auth.hashers.check_password()'「。 – supervacuo