Сообщения для входа в систему Django доставляются не так, как ожидалось
Я создаю Django проект и у меня есть Django приложение для входа в систему, которое я назвал members. Проект находится за логином, поэтому все URL перенаправляют на страницу логина, если пользователь не зарегистрирован.
Если пользователь вводит существующего пользователя и пароль, он может получить доступ к сайту. Это работает нормально.
Если учетные данные неверны, я хочу, чтобы приложение отправляло пользователю сообщение, что-то вроде "Ваши учетные данные неверны, попробуйте еще раз", но я не могу заставить это работать, даже если я скопировал и вставил из официальной документации.
Мое мнение:
def login_user(request):
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
else:
messages.error(request, 'Credenciales inválidas.')
Мой базовый шаблон, который расширяет другой шаблон:
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<title>Mapa Primera Infancia: Login</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" type="text/css" href="{% static 'login.css' %}" />
</head>
<body>
<div class="msg">
{% for message in messages %}
<div class="alert alert-info">{{message}}</div>
{% endfor %}
</div>
{% block content %}
{% endblock %}
</body>
</html>
URLs приложения для членов:
urlpatterns = [
path('login_user/', views.login_user, name='login'),
]
Я не знаю, что не так и как это отладить. Я подозреваю, что проблема не в шаблоне, а в ответе.
Есть подсказки?
Я работаю на Django 3.2.5
Это происходит потому, что вы не перенаправляете на страницу входа в систему для получения ответа.
def login_user(request):
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
else:
messages.error(request, 'Credenciales inválidas.')
return redirect(reverse('login'))
'''if you have declared 'app_name = 'your_app_name',
add this instead of that line:
return redirect(reverse('your_app_name:login') ''''
Наконец, удалось сделать это самостоятельно. Ошибка заключалась в том, что шаблоны в приложении members были сохранены в templates/registration вместо templates/aunthenticate.