Сообщения для входа в систему 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.

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