我在登录页面模板上显示错误时遇到问题。我正在使用 Login 内置视图,我制作了一个继承自 AuthenticationForm 的自定义表单,我尝试覆盖 clean() 方法,但如果用户名或密码不正确,则不会显示任何 ValidationErorr 消息。有什么帮助吗? 我创建了一个自定义视图,因为我需要从自定义 mixin 继承一些限制。 我的观点:
class UserLoginView(IsAuthenticatedMixin, LoginView):
template_name = 'home/auth/login.html'
authentication_form = UserLoginForm
我的表格:
class UserLoginForm(AuthenticationForm):
username = forms.CharField(widget=forms.TextInput())
password = forms.CharField(widget=forms.PasswordInput())
def clean(self):
cleaned_data = super().clean()
username = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
if username is not None and password:
login = authenticate(self.request, username=username, password=password)
if login is None:
raise ValidationError('The username or password are incorrect')
return self.cleaned_data
网址:
path('auth/login/', UserLoginView.as_view(), name='login'),
我的模板:
{% extends 'home/auth/base.html' %}
{% load widget_tweaks %}
{% block content %}
<!-- Outer Row -->
<div class="row justify-content-center">
<div class="col-xl-10 col-lg-12 col-md-9">
<div class="card o-hidden border-0 shadow-lg my-5">
<div class="card-body p-0">
<div class="row">
<div class="col-lg-6 d-none d-lg-block bg-login-image"></div>
<div class="col-lg-6">
<div class="p-5">
<div class="text-center">
<h1 class="h4 text-gray-900 mb-4">Welcome Back!</h1>
</div>
<form class="user" method="POST">
{% csrf_token %}
<div class="form-group">
{% for error in form.non_field.errors %}
<div class="invalid-feedback">
{{ error }}
</div>
{% endfor %}
{% render_field form.username class="form-control form-control-user" id="exampleInputEmail" aria-describedby="emailHelp" placeholder="Enter Username..." %}
</div>
<div class="form-group">
{% render_field form.password class="form-control form-control-user" id="exampleInputPassword" placeholder="Password" %}
</div>
<div class="form-group">
<div class="custom-control custom-checkbox small">
<input type="checkbox" class="custom-control-input" id="customCheck">
<label class="custom-control-label" for="customCheck">Remember Me</label>
</div>
</div>
<input type="submit" name="Login" class="btn btn-primary btn-user btn-block" value="Login">
<hr>
<a href="index.html" class="btn btn-google btn-user btn-block">
<i class="fab fa-google fa-fw"></i> Login with Google
</a>
<a href="index.html" class="btn btn-facebook btn-user btn-block">
<i class="fab fa-facebook-f fa-fw"></i> Login with Facebook
</a>
</form>
<hr>
<div class="text-center">
<a class="small" href="forgot-password.html">Forgot Password?</a>
</div>
<div class="text-center">
<a class="small" href="{% url 'register' %}">Create an Account!</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}