Я создал страницу входа в систему, и она отлично работает! Но когда пользователь вводит неверные учетные данные, как я могу показать ошибку на странице входа? Я попробовал присвоить if и переменную, но это привело к тому, что отображаемая ошибка не имеет значения.Показать ошибки в форме входа
В моих взглядов, я установить «error_message» переменную следующим образом:
def LoginView(request):
error_message = ''
logout(request)
context = RequestContext(request)
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
return HttpResponseRedirect("/")
else:
# Return a 'disabled account' error message
return HttpResponseRedirect("/")
else:
# Return an 'invalid login' error message
---> error_message = "Incorrect username or password."
return render(request, 'profile/login.html', {'error_message': error_message}, context)
Однако в моем шаблоне, эта переменная не отображается независимо от того, что, даже если я установить переменную внутри " if ".
Вот мой шаблон:
{% include '__header.html' %}
<style>
main {
width: 920px;
background: none;
margin-top: calc(50vh - 280px)
}
</style>
<div class="form-container">
<form id="user" method="post" action="/login/"
enctype="multipart/form-data" class="text">
{% csrf_token %}
<div class="title">Login to your account</div>
<div class="form-col">
<div class="field-container">
<div class="field-input-container">
<div class="field-label">Username</div>
<div class="field-input">
<input class="field-input-element" type="text" name="username"/>
</div>
</div>
<div class="field-help"></div>
</div>
</div>
<div class="form-col">
<div class="field-container" style="height: 110px">
<div class="field-input-container">
<div class="field-label">Password</div>
<div class="field-input">
<input class="field-input-element" type="password" name="password"/>
</div>
</div>
<div class="field-error">{{ error_message }}</div>
<div class="field-help"></div>
</div>
</div>
<div class="form-button-container">
<input type="submit" name="submit" value="Login" class="button form-button"/>
</div>
</form>
</div>
{% include '__footer.html' %}
Итак, как я могу показать сообщение об ошибке в шаблоне только если там была ошибка?
Обновленный код на основе ответов от (по-прежнему делает то же самое)
def LoginView(request):
template_name='profile/login.html'
logout(request)
context = RequestContext(request)
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
return HttpResponseRedirect("/")
else:
# Return a 'disabled account' error message
return HttpResponseRedirect("/")
else:
# Return an 'invalid login' error message
error_message = "Incorrect username or password."
else:
error_message = ''
return render(request, 'profile/login.html', {'error_message': error_message}, context)
Почему бы не использовать [login view] (https://docs.djangoproject.com/en/1.9/topics/auth/default/#django.contrib.auth.views.login)? – Sayse
Я хочу больше контролировать то, что на самом деле делает вид, и это отлично работает. Я не собираюсь шутить, пытаясь заставить что-то еще работать, когда это прекрасно работает. –
Для чего стоит, что действительно нужно сделать, чтобы использовать django, эта ссылка, которую я предоставил, даже дает вам пример шаблона – Sayse