python - 使用表单和 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)
解决方案
您只需进行一次查询即可使用给定的电子邮件和密码获取学生:
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})
推荐阅读
- java - 投射对象以限制杰克逊序列化中序列化的数据
- wordpress - 在颤动中更改日期格式
- spring - Spring Boot 2 Actuator 和 Prometheus 开销
- python - 在 Keras 模型中将训练数据指定为元组 (x, y) 的正确方法。适合多个输入和输出
- python - 过滤掉列表并只在python中保留整数
- vue.js - 更新静态 Nuxt 网站中的内容
- razorengine - 如何找到哪个版本的 RazorEngine 适用于哪个 .net 框架?
- javascript - 有没有办法找到嵌套对象属性的兄弟值?
- r - R Shiny 仪表板 - 如何使用选择框以交互方式选择散点图的 x 和 y 轴?
- r - 将比例尺添加到使用 ggRGB 制作的地图