django实现登录时候输入密码错误5次锁定用户十分钟


Posted in Python onNovember 05, 2017

在学习django的时候,想要实现登录失败后,进行用户锁定,切记录锁定时间,在网上找了很多资料,但是都感觉不是那么靠谱,于是乎,我开始了我的设计,其实我一开始想要借助redis呢,但是想要先开发一个简单的,后续在拆分后,然后在去进行拆分, 这样也是很接近我们在真实的开发中所遇到问题。

我的思路是:

输入账号密码》是否已经登录》提示已经登录

输入账号密码》错误次数少于6次》校验密码》登录成功,记录登录时间,错误次数清空,记录登录状态

输入账号密码》错误大于六次》提示锁定,并且记录错误次数

输入账号密码》是否冻结》提示冻结

这样我们就来设计我们的数据库:

class User(AbstractUser):
  avatar=models.ImageField(upload_to='vaatar/%Y/%m',default='vaatar/default/pang')
  qq=models.CharField(u'qq号码', max_length=20,blank=True)
  mobile=models.CharField(u'手机号',max_length=11,blank=True,null=True,unique=True)
  login_sta = models.CharField(u'登录是否锁定', max_length=2, default=0)
  login_suo = models.DateTimeField(u'登录锁定时间')
  pass_errnum=models.IntegerField(u'用户密码输入次数',default=0)
  is_login = models.BooleanField(default=False)
  class Meta:
    verbose_name = u'用户'
    verbose_name_plural = verbose_name
    ordering=['-id']
  def __str__(self) :
    return self.username
 

这里的用户集成了django默认的用户来进行设计的,

那么我们同步我们的数据库。

同步后我们来看看我们的数据库,

django实现登录时候输入密码错误5次锁定用户十分钟

整体结构出来了,我们来设计我们的登录用户的视图,这里还是采用面向对象的方式来设计我们的登录视图,  

具体的实现如下:

from django.contrib.auth.hashers import make_password, check_password
from django.http import Http404, HttpResponseRedirect
from django.shortcuts import render, redirect
from django.views.generic.base import View
class LoginView(View):
  def get(self,request):
    return render(request, 'login.html')
  def post(self,request):
    next = request.META.get('HTTP_REFERER')
    username=request.POST.get('username',None)
    password=request.POST.get('password',None)
    try:
      user = User.objects.get(username= username)
      if user.is_login==True:
        return render(request, 'login.html', {'msg': '同时只能登陆一台设备!'})
      if user.login_sta==True:
        return render(request, 'login.html', {'msg': '账号已经冻结!'})
      if (datetime.datetime.now()-user.login_suo).total_seconds() <600:
        return render(request, 'login.html', {'msg': '账号锁定十分钟内不能登陆!'})
      if user.pass_errnum>5:
        user.login_suo=datetime.datetime.now()
        return render(request, 'login.html', {'msg': '密码输入超过5次,用户锁定十分钟'})
      if check_password(password,user.password) :
        request.session['username'] = username
        if '/logout' or '/reg' in next:
          response = HttpResponseRedirect('/')
        else:
          response= HttpResponseRedirect(next)
        user.last_login=datetime.datetime.now()
        user.is_login=True
        user.pass_errnum=0
        user.save()
        response.set_cookie('username', username, 3600)
        return response
      user.pass_errnum+=1
      user.save()
      return render(request, 'login.html', {'msg': '密码错误'})
    except:
      return render(request,'login.html',{'msg':'用户名不存在!'})

整体的思路以及实现,我们来实验下,这里的补充下,之前的我们的注册的密码,是按照原来的直接储存密码的,这样来说是不安全的,我们来使用django自带的进行密码加密解密。

我们来体验下我们的程序!

django实现登录时候输入密码错误5次锁定用户十分钟

用户已经登录了,我们在另一台设备来退出我们的账号就可以

django实现登录时候输入密码错误5次锁定用户十分钟

这样我们输入6次,就锁定了这个账号,同时也给我们记录了锁定时间。

django实现登录时候输入密码错误5次锁定用户十分钟

 其实这里我们推出的模块的设计如下:

class LogoutView(View):
  def get(self,request):
    try:
      user = User.objects.get(username__exact=request.session['username'])
      user.last_login=datetime.datetime.now()
      user.is_login=False
      user.save()
      del request.session['username']
      return render(request,'index.html')
    except:
      return HttpResponseRedirect('/')

退出我们就记录退出的,把登录状态给修改下。这样一个简单的限制用户登录时候输入密码次数的锁定就这么简单的实现了。

 这样一个简单的django限制用户登录的时候密码输入次数就得到了解决。个人感觉十分方便。

这样做可能后期用户量大,会增加数据库的压力,后续可以吧这一块优化到我们的redis服务器中去。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python黑帽编程 3.4 跨越VLAN详解
Sep 28 Python
python字符串中的单双引
Feb 16 Python
Python2实现的LED大数字显示效果示例
Sep 04 Python
通过Python实现自动填写调查问卷
Sep 06 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
Oct 15 Python
Python 实现两个服务器之间文件的上传方法
Feb 13 Python
python读文件的步骤
Oct 08 Python
Python全局锁中如何合理运用多线程(多进程)
Nov 06 Python
利用matplotlib实现根据实时数据动态更新图形
Dec 13 Python
Python中包的用法及安装
Feb 11 Python
python 错误处理 assert详解
Apr 20 Python
python实现粒子群算法
Oct 15 Python
用Python登录好友QQ空间点赞的示例代码
Nov 04 #Python
Python通过命令开启http.server服务器的方法
Nov 04 #Python
Python实现一个简单的验证码程序
Nov 03 #Python
Python编程django实现同一个ip十分钟内只能注册一次
Nov 03 #Python
简单了解Python中的几种函数
Nov 03 #Python
python Pygame的具体使用讲解
Nov 03 #Python
Python算法输出1-9数组形成的结果为100的所有运算式
Nov 03 #Python
You might like
php简单操作mysql数据库的类
2015/04/16 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
javascript转换字符串为dom对象(字符串动态创建dom)
2010/05/10 Javascript
JavaScript 设计模式 富有表现力的Javascript(一)
2010/05/26 Javascript
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
2011/07/15 Javascript
JS 去前后空格大全(IE9亲测)
2013/07/15 Javascript
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
javascript使用定时函数实现跳转到某个页面
2013/12/25 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
探索Javascript中this的奥秘
2016/12/11 Javascript
javascript使用btoa和atob来进行Base64转码和解码
2017/03/20 Javascript
详解Node项目部署到云服务器上
2017/07/12 Javascript
详解redux异步操作实践
2018/08/15 Javascript
详解Vue 匿名、具名和作用域插槽的使用方法
2019/04/22 Javascript
jQuery pager.js 插件动态分页功能实例分析
2019/08/02 jQuery
JavaScript中的this基本问题实例小结
2020/03/09 Javascript
原生js中运算符及流程控制示例详解
2021/01/05 Javascript
[54:05]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第一场 1月9日
2021/03/11 DOTA
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
Django框架 querySet功能解析
2019/09/04 Python
Python如何读取文件中图片格式
2020/01/13 Python
Python实现企业微信机器人每天定时发消息实例
2020/02/25 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
Python开发.exe小工具的详细步骤
2021/01/27 Python
pycharm 实现调试窗口恢复
2021/02/05 Python
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
英国户外服装品牌:Craghoppers
2019/04/25 全球购物
祖国在我心中演讲稿600字
2014/05/04 职场文书
学习雷锋演讲稿
2014/05/10 职场文书
群众路线问题查摆对照检查材料
2014/10/04 职场文书
群众路线个人整改措施
2014/10/24 职场文书
怎样写工作总结啊!
2019/06/18 职场文书
一文彻底理解js原生语法prototype,__proto__和constructor
2021/10/24 Javascript
索尼ICF-36收音机评测
2022/04/30 无线电
python基础之//、/与%的区别详解
2022/06/10 Python
Redis sentinel哨兵集群的实现步骤
2022/07/15 Redis