首页 > 解决方案 > LoginForm 在 Django 中产生未知的验证错误

问题描述

我创建了一个登录和注册模型表单。注册表工作正常,但是当我提交登录表单时,它显示验证错误

“使用此电子邮件的用户已存在”

我没有定义。页面没有重定向到成功 url,而是重新加载验证错误。

任何建议都会受到欢迎。

在此处输入图像描述

表格.py

class LoginForm(forms.ModelForm):
    email = forms.EmailField(max_length=100, widget=forms.TextInput(attrs={'class': "form-control",
                                                                           'placeholder': "Email"}), required=True)
    password = forms.CharField(widget=forms.PasswordInput(attrs={'class': "form-control",
                                                                 'placeholder': "Password",
                                                                 'name':"login_password"}), required=True)

    class Meta:
        model = CustomUser
        fields = ('email','password',)

视图.py

class LoginView(FormView):
    model = CustomUser
    form_class = LoginForm
    success_url = reverse_lazy('first_app:home')
    template_name = 'login.html'

    def form_valid(self, form):
        print('Inside form_valid of LoginView')
        email = form.cleaned_data.get('email')
        passw = form.cleaned_data.get('password')
        print('1')
        user = authenticate(username=email,password=passw)
        print('2')
        login_auth(self.request,user)
        messages.success(self.request,'Logged in successfully')
        return redirect('first_app:home')

模板

<form method="post" action="{% url 'users:login' %}">
    {% csrf_token %}
    <h2 class="text-center">Sign In</h2>

    {% for error in form.email.errors %}
      <div class="alert alert-danger alert-dismissible" role="alert">
        {{ error }}
      </div>
    {% endfor %}

    <div class="form-group">
        <div class="input-group">
            <span class="input-group-addon"><i class="fa fa-envelope"></i></span>
            {{ form.email }}
        </div>
    </div>

    {% for error in form.password.errors %}
      <div class="alert alert-danger alert-dismissible" role="alert">
        {{ error }}
      </div>
    {% endfor %}
    <div class="form-group">
        <div class="input-group">
            <span class="input-group-addon" style="padding-right: 15px;padding-left: 16px"><i class="fa fa-lock"></i></span>
            {{ form.password }}
        </div>
    </div>
    <div class="form-group">
        <button type="submit" class="btn-login btn-primary btn-block">Login</button>
    </div>
    <div class="clearfix">
        <p class="text-center small">Don't have an account? <a href="{% url 'users:signup' %}">Register</a></p>

    </div>
</form>

模型

class CustomUser(AbstractUser):
    """CustomUser model."""
    username = None
    name = models.CharField(max_length=100)
    email = models.EmailField(_('email address'), unique=True)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

网址.py

urlpatterns = [
    path('signup/', views.RegisterView.as_view(), name='signup'),
    path('login/', views.LoginView.as_view(), name='login'),
    ]

标签: htmldjangodjango-formsdjango-templates

解决方案


尝试在 forms.py 页面的电子邮件列中添加 'name':"login_email"。我认为这会有所帮助。


推荐阅读