Как отобразить сообщения об ошибках для функции логирования в Django?
Я новый Django Developer, и у меня возникли проблемы с функцией входа в систему. Моя проблема заключается в том, что моя система не показывает сообщения об ошибках, хотя они недействительны. Я пытаюсь ввести неправильное имя пользователя и пароль, и я ожидаю, что появятся сообщения об ошибках. Однако это не работает. Вот мой код:
login_register.html
<div class="login-form">
<form action="" method="POST">
{% csrf_token %}
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<p> {{ error }} </p>
{% endfor %}
{% endfor %}
{% endif %}
<h2 class="text-center">Sign in</h2>
<div class="form-group">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">
<span class="fa fa-user"></span>
</span>
</div>
<input
type="text"
class="form-control"
name="username"
placeholder="Username"
required="required"
/>
</div>
</div>
<div class="form-group">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">
<i class="fa fa-lock"></i>
</span>
</div>
<input
type="password"
class="form-control"
name="password"
placeholder="Password"
required="required"
/>
</div>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary login-btn btn-block">
Sign in
</button>
</div>
<div class="clearfix">
<a href="{% url 'reset_password' %}" class="text-center"
>Forgot Password?</a
>
</div>
</form>
<p class="text-center text-muted small">
Don't have an account? <a href="{% url 'register' %}">Register here!</a>
</p>
</div>
view.py
def loginUser(request):
page = 'login'
if request.user.is_authenticated:
return redirect('starting-page')
if request.method == 'POST':
username = request.POST['username'].lower()
password = request.POST['password']
try:
user = User.objects.get(username=username)
except:
messages.error(request, 'Username does not exist')
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect(request.GET['next'] if 'next' in request.GET else 'starting-page')
# return redirect('starting-page')
else:
messages.error(request, 'Username OR password is incorrect')
return render(request, 'users/login_register.html')
form.py
from django.forms import ModelForm
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from .models import Profile
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = User
fields = ['first_name', 'email', 'username', 'password1', 'password2']
labels = {
'first_name': 'Name',
}
def __init__(self, *args, **kwargs):
super(CustomUserCreationForm, self).__init__(*args, **kwargs)
for name, field in self.fields.items():
field.widget.attrs.update({'class': 'input'})
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.loginUser, name="login"),
path('login/', views.loginUser, name="login"),
path('logout/', views.logoutUser, name="logout"),
path('register/', views.registerUser, name="register"),
]
Надеюсь, вы поможете мне решить эту проблему. Большое спасибо!
Попробуйте внедрить приведенный ниже код в свой шаблон. Если есть какие-либо сообщения, добавленные в просмотр, они будут отображены.
{% for message in messages %}
<div class="alert alert-info">{{message}}</div>
{% endfor %}