在学习django的时候,想要实现登录失败后,进行用户锁定,切记录锁定时间,在网上找了很多资料,但是都感觉不是那么靠谱,

于是乎,我开始了我的设计,其实我一开始想要借助redis呢,但是想要先开发一个简单的,后续在拆分后,然后在去进行拆分, 这样也是很接近我们在真实的开发中所遇到问题。

我的思路是:

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

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

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

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

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

classUser(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)classMeta:

verbose_name= u‘用户‘verbose_name_plural=verbose_name

ordering=[‘-id‘]def __str__(self) :return self.username

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

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

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

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

具体的实现如下:

from django.contrib.auth.hashers importmake_password, check_passwordfrom django.http importHttp404, HttpResponseRedirectfrom django.shortcuts importrender, redirectfrom django.views.generic.base importViewclassLoginView(View):defget(self,request):return render(request, ‘login.html‘)defpost(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次,用户锁定十分钟‘})ifcheck_password(password,user.password) :

request.session[‘username‘] =usernameif ‘/logout‘ or ‘/reg‘ innext:

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)returnresponse

user.pass_errnum+=1user.save()return render(request, ‘login.html‘, {‘msg‘: ‘密码错误‘})except:return render(request,‘login.html‘,{‘msg‘:‘用户名不存在!‘})

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

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

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

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

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

classLogoutView(View):defget(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服务器中去。

学习就是这么简单。你要有思路,不会要善于搜索。

千里之行始于足下,万里学习路始于搜索。

mysql登录失败5次锁定300秒_django 实现登录时候输入密码错误5次锁定用户十分钟...相关推荐

  1. microsoftsql新建登录用户登录失败_史上最简单的Spring Security教程(九):自定义用户登录失败页面...

    生活中肯定存在这样的场景,在登录某个网站时,难免会忘记密码,或是验证码输入错误,造成多次尝试.所以,有必要适度的提醒用户,到底是什么原因造成了登录失败,如用户名密码不正确.验证码错误等等.由于 Spr ...

  2. 系统安全加固4——输入密码错误5次锁定账户900秒

      本章节设置在登录界面或者通过ssh远程连接到系统时,输入错误密码5次,锁定15分钟.此配置可以很好的用来防范系统密码被暴力破解. 1.环境操作系统 Server 8.3 (衍生自 CentOS 8 ...

  3. python凯撒密码加密写入文件_Python用户名密码登录系统(MD5加密并存入文件,三次输入错误将被锁定)及对字符串进行凯撒密码加解密操作...

    #-*- coding: gb2312 -*-#用户名密码登录系统(MD5加密并存入文件)及对字符串进行凯撒密码加解密操作#作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/k ...

  4. oracle12c密码登录失败,【译】解决Oracle12c Cloud Control登录验证出错问题

    我是真的跟随这篇文章解决了我EM12C不能登录的问题.不是随便乱找一篇文章翻译的. 解决Oracle12c Cloud Control登录验证出错问题 前几天我试图登录我的EM12c R4环境与SSA ...

  5. 英雄联盟登录服务器显示错误码,lol登录失败_TGP一直验证账号,最后出现登录超时,错误码:1,L......

    英雄联盟登录失败显示无法连接服务器请检查您的网... 第一点,保证有网络.第二点,网速还可以,不然载入时间过长会默认已断网.第三点,保证防火墙没有禁止游戏登录,具体操作见 保证所有英雄联盟有关程序全部 ...

  6. mysql最大执行时间_导入大型MySQL数据库时,最大执行时间超过300秒

    我正在尝试使用命令导入641 MB MySQL数据库: mysql -u root -p ddamiane_fakty < domenyin_damian_fakty.sql 但是我收到了一个错 ...

  7. 服务器维护中登录失败日语,Flutter从服务器中获取日语字符,解码错误

    我正在使用Flutter构建移动应用程序. 我需要json从服务器中获取包含日语文本的文件.返回的一部分json是: { "id": "egsPu39L5bLhx3m21 ...

  8. 华为设备linux ssh登录失败,在华为设备上配置一个SSH登录案例

    SSH是常用的安全的远程管理协议.配置如下: 服务器端: user-interface vty 0 4 authentication-mode aaa //认证模式采用aaa,即调用aaa下的用户名和 ...

  9. Centos7(Ubuntu)密码登录失败锁定设置(亲测)

    在工作中为了防止恶意访问者暴力破解openssh口令.所我们需要设置登录系统失败锁定用户策略. 我的环境是Centos7 服务器1:192.168.239.142 服务器2:192.168.239.1 ...

最新文章

  1. 点滴印象中的周其凤校长
  2. TCL中关于Cells的一些使用方法?
  3. linux下camera驱动分析_《Linux设备驱动程序》(五)——字符设备驱动(下)
  4. Oracle锁庞大介绍
  5. LINQ简记(3):子句
  6. 企业打开云HBase的正确方式,来自阿里云云数据库团队的解读
  7. hibernate运行很慢?查一张只有几条记录的表都要一俩分钟?[问题记录]
  8. testng_TestNG @工厂注释
  9. mysql 计算math_MySQL Math – 可以在查询中计算相关性吗?
  10. qt的信号和槽通信机制(当多个窗口之间来回通信[父窗口和子窗口])
  11. 单相智能电表(Modbus协议)
  12. 手机无法服务器获取信息,荒野行动获取服务器信息一直不动怎么办 获取服务器信息为0解决方法...
  13. 23中设计模式之策略模式
  14. 关于学期结束的一些题目的记录
  15. 关于VMBox重启无法打开虚拟机问题
  16. 市场购物篮分析 Market Basket Analysis
  17. 雨巷 喜欢文学 喜欢雨中撑伞的姑娘
  18. 热烈庆祝祖国成立70周年,2019国庆档大片《我和我的祖国》、《攀登者》、《中国机长》数据分析
  19. mklink创建链接
  20. 交互设计:非原型,不设计

热门文章

  1. 使用ArcGIS制作专题图,并添加经纬网
  2. Defraggler磁盘碎片整理工具,让你的电脑读写速度更快
  3. linux rpm -qa,为什么使用rpm -qa命令显示是空的?
  4. ie11浏览器可以下载java吗_IE11浏览器怎么下载?
  5. 十大音响品牌和十大假洋鬼子
  6. 全国通用ADSL宽带账号快速检测工具0.2 拽爷 专版
  7. 2021年高教杯数学建模国赛C题生产企业原材料的订购与运输
  8. 通过微博用户名称获取用户id及用户的文章详情
  9. str. 在java什么意思_在JAVA里timestr表示什么意思
  10. 和优秀的人在一起,会激励自己变得优秀。