我在django中实现了密码恢复功能 . 使用我的方法,新密码将被发送到他输入的电子邮件ID . 当我提供正确的电子邮件(数据库中存在的电子邮件ID)时,它的工作正常 . 但是当我给出一个不在数据库中的电子邮件ID时,它会给我这个错误'DoesNotExist at / forgotPassword /
大学详细信息匹配查询不存在 . ' . 有人可以帮助解决这个问题 . 将粘贴我的代码 . 有人可以帮我解决这个问题 .
forgotPassword.html()
def forgotPassword(request):
if request.POST:
email=request.POST.get("email")
user = UniversityDetails.objects.get(email=email)
if(not user):
print "No user"
return render_to_response("forgotPassword.html")
else:
newPassword = user.password
send_mail('Password Recovery', 'The password for your site is '+ newPassword, 'rv_nair@gmail.com',
['rv_ks@gmail.com'], fail_silently=False)
return render_to_response("passwordRecovery.html")
return render_to_response('forgotPassword.html')
html
<form name="forgotPassword" method="POST" id="myFormid" action="http://10.1.0.90:8080/forgotPassword/">
<div style="float:center;width:100%;color:#0000A0">
Enter your E-mail ID</label>
<input type="text" name="email" size="25" />
<input type="submit" value="Submit" />
</div>
</form >
6 回答
我也有这个问题 . 这是由于开发服务器在Aptana中的调试中止后没有删除django会话而导致后续数据库删除 . (意味着下次开发服务器启动时会话中仍存在不存在的数据库记录的ID)
为了在开发过程中解决这个问题,我用了
你可以尝试这种方式 . 只需使用一个函数来获取您的对象
我也看到你用明文存储你的密码(一个很大的安全禁止!) . 你为什么不使用内置的auth系统?
如Django docs中所述,当
get
方法找不到条目或找到多个条目时,它会引发异常,这是预期的行为:使用异常是一种处理这个问题的方法,但我实际上并不喜欢丑陋的
try-except
块 . 另一种解决方案,对我来说更清洁,就是使用filter
first
的组合 .当您对空的查询集执行
.first()
时,它返回None
. 这样,您可以在一行中获得相同的效果 .捕获异常和使用此方法之间的唯一区别是,当您有多个条目时,前者将引发异常而后者将设置第一个元素,但是当您使用
get
时,我可能会认为我们不会陷入这种情况 .请注意,在Django 1.6上添加了
first
方法 .您可以在您的情况下使用它,它将正常工作 .
user = UniversityDetails.objects.filter(email = email).first()
如果有人在这里并且其他两个解决方案没有成功,请检查您使用的过滤器是否符合预期:
是电子邮件字符串,还是无?还是整数?