Django:基于类的视图登录

时间:2015-10-11 15:19:33

标签: django django-forms django-views

我正在尝试编写自己的简单登录页面,但每当我提交数据时,它都会显示user already exists

我从未致电save

这是我的views.py

def login (request):
    form = loginform(request.POST)
    if request.method == 'POST':
        if form.is_valid():
            email = form.cleaned_data['EMAIL']
            code = form.cleaned_data['code']
            user = authenticate(username=email, password=code)

            if user is not None:
                return HttpResponseRedirect('exam')

    else:
        form = loginform()

    return render(request, 'frontend/login.html', {'form': form})

my forms.py

class loginform(ModelForm):
    EMAIL = forms.CharField( max_length=30, label = ("Your Email"))
    code = forms.CharField( max_length=30, label = ("Your Code"))
    class Meta:
        model = APPLICANT_DATA
        fields = ('EMAIL', 'code',)

我和this有类似的问题,但我无法跟进,因为我有点像初学者

任何指针,链接或小样本代码都会有所帮助

提前谢谢

1 个答案:

答案 0 :(得分:1)

您不应该将ModelForm类用于登录表单的基类,因为在这种情况下,当您在视图中调用form.is_valid()时,它不仅会验证电子邮件和代码表单字段,还会检查您是否可以使用已提交的电子邮件和代码创建APPLICANT_DATA的新实例。因此,您的表单实例无效,这就是您看到消息的原因"用户已经存在"

在您的情况下,您只需要验证电子邮件和代码字段,因此您应该使用forms.Form类作为loginform的父类。