首页 > 解决方案 > 使用表单和 Django 的用户登录身份验证

问题描述

我正在尝试使用表单为登录页面设置用户身份验证并将其与数据库值进行比较,并且我的代码有效,但后来我意识到如果我输入任何密码(如果数据库中可用),我将成功登录。我想要做的是搜索邮件并获取该用户的密码,而不是整个数据库。我的数据库不会包含重复的电子邮件,所以我不必担心。我花了太多时间试图弄清楚如何为电子邮件所在的同一用户获取密码。

我的 login.views 看起来像这样

def login(request):
if request.method == "POST":
    form = Studentlogin(request.POST)
    if form.is_valid():
        email = form.cleaned_data.get('email')
        password = form.cleaned_data.get('password')
        user = User.objects.create_user(email, password)
        try:
            studentemail = students.objects.get(email=email)
            studentpass = students.objects.get(password=password)
            return render (request, 'subscrap/main.html', {'student': studentemail })
        except:
            messages.success(request, 'Error, either Email or Password is not correct')
            pass
else:
    form = Studentlogin()
return render(request, 'subscrap/login.html', {'form': form})

我的学生模型如下所示:

class students(models.Model):
fname = models.CharField(max_length=50)
lname = models.CharField(max_length=50)
password = models.CharField(max_length = 50 , null = True)
passwordrepeat = models.CharField(max_length = 50, null = True)
email = models.EmailField(max_length=150)
class Meta:
    db_table = "students"

我的表格文件:

class StudentForm(forms.ModelForm):
    class Meta:
        model = students
        fields = "__all__"

class Studentlogin(forms.Form):
    email = forms.EmailField(max_length=150)
    password = forms.CharField(max_length = 50, widget=forms.PasswordInput)

标签: pythonmysqldjangoauthenticationdjango-forms

解决方案


您只需进行一次查询即可使用给定的电子邮件和密码获取学生:

def login(request):
    if request.method == "POST":
        form = Studentlogin(request.POST)
        if form.is_valid():
            email = form.cleaned_data.get('email')
            password = form.cleaned_data.get('password')
            user = User.objects.create_user(email, password)
            try:
               student = students.objects.get(email=email, password=password)
               return render (request, 'subscrap/main.html', {'student': student})
            except:
               messages.success(request, 'Error, either Email or Password is not correct')
        else:
           form = Studentlogin()
        return render(request, 'subscrap/login.html', {'form': form})

推荐阅读