Пользовательская форма AuthenticationForm для аккаунтов Django не работает как недействительная
Почему он выдает form invalid
?
Мое имя пользователя и пароль введены правильно.
forms.py
class CustomAuthForm(AuthenticationForm):
username = forms.CharField(required=True, max_length = 50,
widget=forms.EmailInput(attrs={"placeholder": "Email", "class":"form-control"}))
password = forms.CharField(required=True, max_length = 50,
widget=forms.PasswordInput(attrs={"placeholder":"Password", "class":"form-control"}))
views.py
@csrf_protect
def user_login(request):
if request.user.is_authenticated:
return redirect('/')
form=CustomAuthForm(request.POST or None)
print(request.POST)
if form.is_valid():
print(form.cleaned_data)
else:
print ('form invalid')
Печать консоли
<QueryDict: {'csrfmiddlewaretoken': ['mt5a3e9KyCbVg4OokaDeCu97EDrHVInAwVJmmK3a2xn0Nn4KRi0gt7axWJyRDMmT'],
'username': ['myemail@gmail.com'], 'password': ['mypass']}>
form invalid
Взглянув на исходный код для AuthenticationForm
, на котором основан ваш CustomAuthForm
, можно увидеть, что его __init__
функция немного отличается от большинства других форм. В частности, в качестве первого параметра она принимает объект request
.
# https://github.com/django/django/blob/main/django/contrib/auth/forms.py
def __init__(self, request=None, *args, **kwargs):
"""
The 'request' parameter is set for custom auth use by subclasses.
The form data comes in via the standard 'data' kwarg.
"""
self.request = request
self.user_cache = None
super().__init__(*args, **kwargs)
Поэтому измените синтаксис в своем представлении:
# from
form=CustomAuthForm(request.POST or None)
# to
form=CustomAuthForm(None, request.POST)