Объект '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