Объект 'NoneType' не имеет атрибута 'save' Django

Я получаю эту ошибку, когда пытаюсь войти в систему с невалидным пользователем, я хочу, чтобы вместо этого меня перенаправляли на страницу входа.

Выделяет user.save() на muy views.py

views.py

def user_login(request):
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            user = authenticate(request, **form.cleaned_data)
            user.save()
            if user:
                login(request, user)
                return redirect('home')
            else:
                return redirect(reverse('login'))
    else:
        form = LoginForm()
    return render(request, 'accountApp/login.html', {'form': form})

forms.py

from django import forms
from django.contrib.auth.forms import UserCreationForm


class LoginForm(forms.Form):
    username = forms.CharField(max_length=100)
    password = forms.CharField(widget=forms.PasswordInput)

login.html

{% block content %}

  <form method="post">
    {% csrf_token %}
      <h1>Login</h1>
    <fieldset class="form-group" style="width: 250px;">
      {{ form|crispy }}
    </fieldset>
    <button type="submit">Log In</button>
  </form>
{% endblock %}

функция authenticate возвращает None в случае неправильных учетных данных, поэтому проверьте, действителен ли пользователь или нет. измените условие if на if user is not None:. т.е. views.py выглядит следующим образом.

def user_login(request):
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            user = authenticate(request, **form.cleaned_data)
            # user variable will be None if it is an invalid user
            if user is not None:
                login(request, user)
                return redirect('home')
            else:
                return redirect(reverse('login'))
    else:
        form = LoginForm()
    return render(request, 'accountApp/login.html', {'form': form})

обратитесь к документации: https://docs.djangoproject.com/en/4.1/topics/auth/default/#django.contrib.auth.login

Вернуться на верх