在 Django 中显示 LoginView 错误

时间:2021-01-17 18:26:17

标签: python django forms

我在登录页面模板上显示错误时遇到问题。我正在使用 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 %}

0 个答案:

没有答案
相关问题