Пользовательская форма 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)
Вернуться на верх