Django中的密码找回实现
我正在尝试在我的Django应用中实现一个找回密码的功能。我创建了一个单独的forgottenPassword.html页面,用户可以在这里输入他们的邮箱地址;如果这个邮箱已经注册(在数据库中找到了),那么就会把对应的密码提取出来,并发送到这个邮箱。这就是我想要实现的功能。作为一个Django新手,我在实现过程中遇到了困难。这是我的 forgottenPassword.html
<form name="forgotPassword" method="POST" id="myFormid" action="http://10.1.0.90:8080/forgotPassword/">
<div style="float:center;width:100%;">
Enter your E-mail ID</label><br/> <input type="text" name="email" size="25" />
<input type="submit" value="Submit" />
</div>
</form >
我在views.py中的方法是
def forgotPassword(request):
if request.POST:
email=request.POST.get("email")
print email
user = UniversityDetails.objects.filter(email=email)
print user
if(not user):
print "No user"
return render_to_response("forgotPassword.html")
else:
???????????????
return render_to_response("passwordRecovery.html")
return render_to_response('forgotPassword.html')
在这里,我想要做的是把用户在forgottenPassword.html中输入的邮箱地址传递过来,并把它保存到一个叫做'email'的变量中。之后,从数据库中获取所有与这个邮箱相关的对象,并从中筛选出密码。我想我在????的地方应该填入一个查询,用来提取与这个邮箱地址对应的密码。有人能帮我解决这个问题吗?
2 个回答
20
这个设计上是不可能做到的。你无法获取用户的密码,因为密码在数据库中只以安全的哈希值存储,而这个哈希值是无法被反向解码的。
不过,Django确实提供了一个内置的重置密码的功能,具体在contrib.auth模块里 - 你可以查看这份文档。
5
rv_k,我想说的是,我建议你看看django.contrib.auth,而不是你现在的系统,因为你把密码存储成了明文。
话虽如此,来回答你的问题,你已经根据邮箱查询到了UniversityDetails
的信息。假设每个“用户”只有一个邮箱,那就用get查询来代替吧。
user = UniversityDetails.objects.get(email=email)
send_mail("Your PW", user.password, "admin@example.com", [email])