Функция 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',}))