django1.11+python+mysql数据库
情景:用django框架的网站用户管理部分,找回密码应用验证用户名和邮箱(将邮箱作为类密保的验证信息使用)的方法来修改用户信息的密码段数据,即验证数据库中:用户名存在且验证邮箱信息正确进行密码修改。而验证用户信息可以使用get,filter操作,如下:
数据库user表内容:
class user(models.Model):
username = models.CharField(max_length=20)
password = models.CharField(max_length=15)
email = models.EmailField(default= 'blank@qq.com')
def __unicode__(self):
return self.username
应用数据库get操作:
if request.method == "POST":
username = request.POST['username']
email = request.POST['email']
password = request.POST['password']
exist_user =models.user.objects.get(username=username,
email=email)
if exist_user:
exist_user.password=password
exist_user.save()
response = HttpResponseRedirect('/user/')
return response
else:
error = "验证邮箱信息错误!"
errors = Context({"errors": error})
return render_to_response('erroe.html', errors)
以上代码实现的是对验证用户名和邮箱,如果正确,则修改密码并保存返回主页,错误的话显示提示信息。然而get操作的返回值是一个对象,如果验证错误在实际运行不会按代码报错而会出现莫名错误,故不可行,当然你可以选择不写else,这是不建议的,而且你不能保证用户输入的用户名和邮箱都是正确的,这样的话,也不能得到正确的对象,仍会出错。
应用数据库filter操作
if request.method == "POST":
username = request.POST['username']
email = request.POST['email']
password = request.POST['password']
exist_user = models.user.objects.filter(username=username)
if exist_user:
exist__mail = models.user.objects.filter(username=username,email=email)
if exist__mail:
exist__mail.update(password = password)
response = HttpResponseRedirect('/user/')
return response
else:
error = "验证邮箱信息错误!"
errors = Context({"errors": error})
return render_to_response('erroe.html', errors)
else:
error = "用户名不存在!"
errors = Context({"errors": error})
return render_to_response('erroe.html', errors)
else:
response = HttpResponseRedirect('/user/')
return response
以上代码分步验证用户名是否存在,邮箱信息是否正确,从而进一步进行密码的修改,在此密码修改应用update方法后不再使用save保存,如若粗心使用,将会出现“’QuerySet’ object has no attribute ‘save’ “的错误提示,这是因为filter返回的是一个对象集不支持该属性操作。
当然,django框架内置有丰富的用户管理模块,可实现丰富的用户管理行为。