我在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><br/> <input type="text" name="email" size="25" />
<input type="submit" value="Submit" />
</div>
</form >
答案 0 :(得分:138)
try:
user = UniversityDetails.objects.get(email=email)
except UniversityDetails.DoesNotExist:
user = None
我也看到你以明文形式存储你的密码(一个很大的安全禁忌!)。你为什么不使用内置的auth系统?
答案 1 :(得分:7)
我也有这个问题。 这是由于开发服务器在Aptana中的调试中止后没有删除django会话而导致后续数据库删除。 (意味着下次开发服务器启动时会话中仍存在不存在的数据库记录的ID)
要在开发过程中解决此问题,我使用了
request.session.flush()
答案 2 :(得分:1)
您可以尝试这种方式。只需使用一个函数来获取对象
lastSpawnArrowTime = elapsedTime()
答案 3 :(得分:1)
如Django docs中所述,当get
方法找不到条目或找到多个条目时,它会引发异常,这是预期的行为:
如果有多个对象,get()会引发MultipleObjectsReturned 找到。 MultipleObjectsReturned异常是。的一个属性 模特课。
如果找不到对象,get()会引发一个DoesNotExist异常 给定的参数。此异常是模型的属性 类。
使用例外是解决此问题的一种方法,但实际上我并不喜欢丑陋的try-except
块。另一种解决方案,对我来说更清洁,就是使用filter
+ first
的组合。
user = UniversityDetails.objects.filter(email=email).first()
当您对空查询集执行.first()
时,它会返回None
。这样,您就可以在一行中获得相同的效果。
捕获异常和使用此方法之间的唯一区别是,当您有多个条目时,前者将引发异常而后者将设置第一个元素,但是当您使用get
时,我可能会假设我们不会落在这种情况上。
请注意,在Django 1.6上添加了first
方法。
答案 4 :(得分:1)
您可以在自己的情况下使用它,它将正常工作。
user = UniversityDetails.objects.filter(email=email).first()
答案 5 :(得分:0)
如果有人在这里并且其他两个解决方案没有成功,请检查您用于过滤的内容是否符合预期:
user = UniversityDetails.objects.get(email=email)
是电子邮件str
还是None
?还是int
?
答案 6 :(得分:0)
在数据库为空的情况下尝试匹配电子邮件时出现问题。因此,如果您想解决此类错误,请尝试将其放入 try except 块中。例子是 -
try:
user = UniversityDetails.objects.get(email=email)
except UniversityDetails.DoesNotExist:
user = None