2017-06-25 7 views
2

ユーザー名とパスワードの入力が完了すると、このエラーは吹き飛び、ユーザー名とパスワードは一致しませんが、すべてのデータは真実です!どのようにそれを修正するには? データベースのパスワードが暗号化された形式で保存され、指定されたパスワードが文字列の形式で保存されている場合、パスワードを確認する方法!フォームのパスワード検証を修正する方法パスワードが一致しません

ご協力いただきありがとうございます、私はあなたのアドバイスをお待ちしております!

forms.py

class UserLogInForm(forms.Form): 
    username = forms.RegexField(regex=r'^\w+$', widget=forms.TextInput(attrs=dict(required=True, max_length=30)), label=_("Username"), error_messages={ 'invalid': _("This value must contain only letters, numbers and underscores.") }) 
    password = forms.CharField(widget=forms.PasswordInput(attrs=dict(required=True, max_length=30, render_value=False)), label=_("Password")) 

def clean_username(self): 
    user = User.objects.get(username__iexact=self.cleaned_data['username']) 
    if user: 
     return self.cleaned_data['username'] 
    else: 
     raise forms.ValidationError('This user does not exist!') 

def clean(self): 
    username = self.cleaned_data['username'] 
    password = self.cleaned_data['password'] 
    user = User.objects.filter(username=username) 
    if user.count() == 1: 
     user = user.first() 
     if user.check_password(password): 
      raise forms.ValidationError("Incorrect password!") 
     return self.cleaned_data 
    else: 
     raise forms.ValidationError('This user does not exist!') 

views.py

def login_view(request): 
    form = UserLogInForm(request.POST or None) 
    if form.is_valid(): 
     username = form.cleaned_data['username'], 
     password = form.cleaned_data['password'], 

     user = authenticate(request, username=username, password=password) 
     if user is not None: 
      login(request, user) 
      return redirect('/') 
     else: 
      return redirect('accounts/login') 
    context = {'form':form} 
    return render(request, 'accounts/registration/login.html', context) 

答えて

1

ときcheck_password() Trueを返しますが、エラーを上げています。

は、私は、また

def clean(self, *args, **kwargs): 
    username = self.cleaned_data.get("username") 
    password = self.cleaned_data.get("password") 
    try:    
     user = User.objects.get(username=username) 
    except User.DoesNotExist: 
     raise forms.ValidationError("This user does not exist!") 
    if user and not user.check_password(password): 
     raise forms.ValidationError("Incorrect password!"): 
    if user and not user.is_active: 
     raise forms.ValidationError("This user is no longer active.") 
    return super(UserLogInForm, self).clean(*args, **kwargs) 

は、あなたのビューでこれらの行から末尾のカンマを削除し、あなたがこのような方法で何かを再書き込むことが示唆により末尾のカンマへ

username = form.cleaned_data['username'] 
password = form.cleaned_data['password'] 

、 Pythonは文字列ではなくタプルを返します。

+0

私は6分後に回答を受け入れることができますが、1つの質問がありますが、すべてうまくいっていますが、私に許可しませんでした –

+0

あなたのクリーンメソッドの大きな変更を提案できますか? – zaidfazil

+0

もちろん、私は幸せになるでしょう) –

関連する問題