我创建了一个登录和注册模型表单。注册表格工作正常,但当我提交登录表格时,它显示验证错误
“使用此电子邮件的用户已存在”
我没有定义。页面不会重定向到成功 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'),
]
不要ModelForm
用作登录表单 - 您的表单正在尝试创建新表单,CustomUser
而不仅仅是使用数据进行身份验证。将其改为 just Form
。
第二个问题是您试图获取不正确的字段。用这个:
email = form.cleaned_data.get('email')
passw = form.cleaned_data.get('password')
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句