Функция is_valid() формы аутентификации не работает, когда учетные данные неверны

Я расширил встроенную форму аутентификации, чтобы использовать bootstrap naming LoginForm. Если пользователь указывает неверные данные, я хочу показать сообщение «Wrong Credential». Но функция is_valid() работает только тогда, когда данные (имя пользователя, пароль) полностью совпадают. Допустим, я ввожу правильное имя пользователя, но неправильный пароль, тогда функция is_valid() не работает. В результате я не могу вывести сообщение о том, что пароль неправильный. Но я создал другую форму, подклассифицировав forms.Form. В этом случае функция is_valid() работает и для неправильных учетных данных и показывает сообщение для неправильных имени пользователя и пароля.

Это моя форма.

class LoginForm(AuthenticationForm):
    username = UsernameField(
        widget = forms.TextInput(attrs={'autocomplete':'off','class':'form-control','placeholder':'Enter your email'})
        )
    password = forms.CharField(
        label=_('Password'),
        strip=False,
        widget=forms.PasswordInput(attrs={'autocomplete':'off','class':'form-control','placeholder':'Enter your password'})
        )

это views.py

def signin(request):
    if request.method == 'POST':
        form = LoginForm(data=request.POST)
        if form.is_valid():
            print('1')
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = authenticate(request,username=username,password=password)
            print('2')
            if user is not None:
                login(request,user)
                print('3')

                return redirect('registration')
            else:
                print('4')
                messages.warning(request,'Wrong Credentials!')
        else:  # Use form.errors for displaying errors
            print(form.errors)
    else:
        print('get')
        form = LoginForm()
    return render(request,'account/login.html',{'form':form})

поскольку эта форма не работает. для тестирования я создал другую форму. и она работает нормально и показывает сообщение об ошибке «Wrong credentials», если какое-либо из полей не соответствует имени пользователя и паролю.

class LoginForm(forms.Form):
    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)

    username = forms.CharField(max_length=150,widget=forms.TextInput(attrs={"autofocus": True,'class':'form-control','placeholder':'Enter your Email',}))

    password = forms.CharField(max_length=150, widget=forms.PasswordInput(attrs={"autocomplete": "current-password",'class':'form-control','placeholder':'Enter your password',}))
Вернуться на верх