3.3.4 用户登录密码修改
系统为用户提供用户登录密码的修改。根据需求定义,修改用户密码的时候,必须提供旧密码、新密码和新密码的确认,并且新密码不能与旧密码相同。如果旧密码不正确、新密码与旧密码相同或者新密码和新密码的确认信息不一致,系统应该给出相应的提示信息。
1. urls.py
... url(r'^change_password/$', views.change_password), ...
2. views. py
... # 修改用户密码 def change_password(request): util = Util() username = util.check_user(request) if username=="": uf = LoginForm() return render(request,"index.html",{'uf':uf,"error":"请登录后再进入"}) else: count = util.cookies_count(request) #获得当前登录用户的用户信息 user_info = get_object_or_404(User,username=username) #如果是提交表单,获取表单信息,并且进行表单信息验证 if request.method == "POST": #获取旧密码 oldpassword=(request.POST.get("oldpassword", "")).strip() #获取新密码 newpassword=(request.POST.get("newpassword", "")).strip() #获取新密码的确认密码 checkpassword=(request.POST.get("checkpassword", "")).strip() #如果旧密码不正确,报错误信息,不允许修改 if oldpassword !=user_info.password: return render(request,"change_password.html",{"user": username,"error":"旧密码不正确","count":count}) #如果新密码与旧密码相同,报错误信息,不允许修改 elif newpassword ==oldpassword: return render(request,"change_password.html",{"user": username,"error":"新密码不能与旧密码相同","count":count}) #如果新密码与新密码的确认密码不匹配,报错误信息,不允许修改 elif newpassword != checkpassword: return render(request,"change_password.html",{"user": username,"error":"确认密码与新密码不匹配","count":count}) else: #否则修改成功 User.objects.filter(username=username).update(password=newpassword) return render(request,"change_password.html",{"user": username,"error":"密码修改成功","count":count}) #如果不是提交表单,显示修改密码页面 else: return render(request,"change_password.html",{"user": username,"count":count}) ...
(1)首先确认当前用户是否为登录用户。
(2)然后判断是否为表单提交状态。如果不是显示修改密码页面,否则获取旧密码、新密码和新密码确认码。
(3)最后作如下三项判断操作。
①旧密码是否正确。
②新密码与旧密码是否不相同。
③新密码与新密码的确认码是否相同。
(4)如果不满足需求,跳转到change_password.html页面中显示错误信息,否则通过代码User.objects.filter(username=username).update(password=newpassword)保存新密码。
(5)返回change_password.html显示密码修改正确的信息。
3. 模板
change_password.html
{% extends "base.html" %} {% block content %} <li><a href="/view_chart/">查看购物车<font color="#FF0000">{{ count }}</font></a></li> </ul> <ul class="nav navbar-nav navbar-right"> <li><a href="/user_info/">{{user}}</a></li> <li><a href="/logout/">退出</a></li> </ul> </div><!--/.nav-collapse --> </div> </nav> <div class="container theme-showcase" role="main"> <div> <div id="navbar" class="navbar-collapse collapse"> </div><!--/.navbar-collapse --> </div> <div> <div> <form action="/change_password/" method="post" enctype="multipart/form-data"> <p style="color:red">{{error}}</p><br> 旧密码:<input name="oldpassword" type="password" required><br> 新密码:<input name="newpassword" type="password" required><br> 确认密码:<input name="checkpassword" type="password" required><br> <input type="submit" value="修改"> </form> </div> </div> {% endblock %}
用户密码修改页面如图3-6所示。
图3-6 用户密码修改页面
星云测试
奇林软件
联合通测
顾翔凡言:
软件测试正在生病,而且病得不轻,自动化测试被要不吹得太火,要不一点都不会,自动化比不过开发、测试又找不到缺陷,丢了西瓜也捡不到芝麻。