大家一直关注的车辆管理系统已经更新了,本次加入了“用户管理”和“登陆验证”功能。
登陆验证前端采用了ajax技术,体验效果更好。
后端除了实现了用户管理,同时实现了输错5次密码,冻结账户10分钟的功能哦。另外使用了django的“中间件”及“全局上下文”,可以说学习和参考的价值极大。由于时间原因,今天又出不了视频讲解了。下一期吧,尽量还是出视频给大家讲解一下中间件、全局上下文和view登陆验证部分。特别是登陆验证这部分,比以前的登陆验证要精简了不少,但是效果反而比以前的好了。
![6d8bebde8107c244a13414abf2164e59.png](https://i-blog.csdnimg.cn/blog_migrate/7c1ee3fa652826d00ddbbd83da514b59.jpeg)
下面展示view的部分代码和ajax部分代码。
想要获取全部源码的朋友请关注并私信“车辆2”,自动获取下载链接。
ajax部分
function cl_login() { var username = $('#username_login').val(); if (!username) { alert('请输入用户名'); return false; } var password = $('#password_login').val(); if (!password) { alert('请输入密码'); return false; } var csrf = $('input[name="csrfmiddlewaretoken"]').val(); $.ajax({ url: '/cl/login/', type: 'post', data: { 'csrfmiddlewaretoken': csrf, 'username': username, 'password': password, }, success: function (result) { var ret = JSON.parse(result); // 密码正确,正常跳转 if (ret['msg'] === '801') { window.location.href = '/cl/'; } // 账户正在冻结期,提示剩余冻结时间,待修改倒计时 else if (ret['msg'] === '802') { alert('您的账户在冻结期'); var frozen_time = ret['frozen_time']; alert(frozen_time); } // 账户错误 else if (ret['msg'] === '803') { alert('用户名错误'); } // 密码错误提示剩余次数,待修改次数倒计时 else if (ret['msg'] === '804') { var frozen_times = ret['frozen_times']; alert(frozen_times); } // 提示已被冻结 else if (ret['msg'] === '805') { alert(ret['error_msg']); } else { alert('系统错误'); } }, error: function () { alert('请重新提交'); } });}
views登陆验证部分,
# 用户密码输错5次开始冻结10分钟,每次登陆验证先看是否冻结,并计算冻结时间是否大于10分钟,如果大于10分钟则解冻,否则返回冻结时间,并由前端js计算剩余时间并读秒显示# 如果未冻结则验证账户密码,如果密码错误,则session中记录错误次数,并返回错误次数由js计算剩余次数并显示,5次错误开始冻结# 验证通过后返回801并由js跳转至/cl/,并记录session = username# 801-验证通过,802正在被冻结,803用户不存在,804密码错误,805第五次错误并提示冻结
def post(self, request): username = request.POST.get('username') password = request.POST.get('password') # 用户是否冻结 username_frozen = FrozenOperatorUsers.objects.filter(operator__username=username) # 用户被冻结 if username_frozen.exists(): frozen_time = username_frozen.first().FrozenDateTime time_now = timezone.now() # 冻结时间加10分钟与现在比较 frozen_time_plus_10m = frozen_time + timezone.timedelta(minutes=10) if frozen_time_plus_10m <= time_now: FrozenOperatorUsers.objects.get(operator__username=username).delete() else: frozen_time_json = datetime.datetime.strftime(frozen_time, '%Y-%m-%d %H:%M:%S') return HttpResponse(json.dumps({'msg': '802', 'frozen_time': frozen_time_json})) # 用户未被冻结 else: # 用户是否存在/密码是否正确 try: user_this = OperateUsers.objects.get(username=username) except: # 用户不存在 return HttpResponse(json.dumps({'msg': '803'})) # 密码不正确 session_user_error_time = request.session.get(username) if not check_password(password, user_this.password): # session记录错误次数,session中如果没有记录则创建,如果有则增加错误次数 if not session_user_error_time: request.session[username] = 1 else: if session_user_error_time >= 5: freeze_operator = FrozenOperatorUsers(operator_id=user_this.id) freeze_operator.save() return HttpResponse(json.dumps({'msg': '805', 'error_msg': '您的账户已被冻结'})) request.session[username] = (session_user_error_time + 1) return HttpResponse(json.dumps({'msg': '804', 'frozen_times': request.session[username]})) # 密码正确 else: if session_user_error_time: del request.session[username] print(request.session.get(username)) request.session['username'] = username return HttpResponse(json.dumps({'msg': '801'}))
大家有没有更好的验证代码,欢迎评论交流哦。
欢迎关注“教程智库”,每天更新干货,学习不再迷路。