Сброс URL-адреса Django после сбоя аутентификации
if user is not None:
login(request, user)
return redirect('home')
else:
error_message = "Invalid username or password."
return render(request, 'login.html', {'error_message': error_message})
При использовании приведенного выше кода, если пользователь введет неправильные учетные данные, login.html отобразится успешно с сообщением об ошибке.
Но теперь URL - http://localhost:8000/authentication_view/.
Теперь, если пользователь повторно введет учетные данные, URL будет http://localhost:8000/authentication_view/authentication_view/, и возникнет ошибка Page Not Found.
If I use return redirect('login_view'), then the error message will not show.
Может ли кто-нибудь помочь мне, как показать страницу входа в систему с сообщением об ошибке без добавления Authentication View в URL?
Я ожидал: если пользователь вводит неверные учетные данные, он получает сообщение об ошибке и возвращается на страницу входа. Теперь он может повторно ввести учетные данные. Но теперь страница входа не может быть использована, потому что имя представления аутентификации уже добавлено в URL. При новой попытке входа в систему имя представления аутентификации будет добавлено в URL дважды.
Проблема с действием, упомянутым на html-странице в теге формы.
у вас должно быть что-то вроде <form method="post" action="authentication_view/">
Для решения проблемы лучше всего удалить действие из тега формы. по умолчанию html-форма отправляется на ту же страницу. сделайте что-то вроде этого.
<form method="post">
Если вы загружаете страницу с другого url и отправляете форму на другой, укажите полный url. в вашем случае он должен быть.
<form method="post" action="/authentication_view">
Покажите html-код страницы входа в систему
Ошибка может быть связана с атрибутом action в форме входа в систему
Лучше использовать динамические ссылки, как в :
action = {% url 'login_view' %}
или имя, которое вы дали представлению в urls.py.