在学习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默认的用户来进行设计的,

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

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

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

 

具体的实现如下:

    

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自带的进行密码加密解密。

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

    

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

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

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

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服务器中去。

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

     

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

django 实现登录时候输入密码错误5次锁定用户十分钟的更多相关文章

  1. spring boot 实现密码连续输入错误5次,限制十分钟内不能进行登录

    我们要实现的就是,密码连续输入错误5次,就限制用户十分钟不能进行登录. 大致的流程图 数据库设计如下 DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ...

  2. php 实现密码错误三次锁定账号10分钟

    /** * 登录 * 1.接收数据 * 2.正则判断接收到的数据是否合理 * 3.根据用户名获取用户数据 * 获取到数据 -> 继续执行 * 没有获取到数据 -> 提示:用户名密码错误 * ...

  3. python 3.5 用户登录验证和输入三次密码锁定用户

    #!/usr/bin/env python #encoding: utf-8 #登录程序,输入用户和密码输出欢迎信息,输入错误三次锁定用户,不让登录 import sys print (''' 欢迎登 ...

  4. sql server 用户'sa'登录失败(错误18456)(转载)

    转载地址:http://thenear.blog.51cto.com/4686262/865544 用户'sa'登录失败(错误18456)解决方案图解 当我们在使用sql server 的时候可能会遇 ...

  5. "SQLServer无法打开用户默认数据库,登录失败,错误4064"的解决办法

    "SQLServer无法打开用户默认数据库,登录失败,错误4064"的解决办法 1.检查登录密码 如果密码错误,修改数据库密码,用windows身份验证登录进去, (1)安全--登 ...

  6. Oracle登录时提示错误,导致用户无法登录

    Oracle登录时提示错误,导致用户无法登录,错误如下 ------------------------------------------------------------------------ ...

  7. sql server 用户'sa'登录失败(错误18456)

    转载于:http://thenear.blog.51cto.com/4686262/865544 用户'sa'登录失败(错误18456)解决方案图解     当我们在使用sql server 的时候可 ...

  8. 登录PL/SQL无法登录,提示错误:ORA-01017: invalid username/password; logon denied 错误

    在使用在登录PL/SQL(使用scott用户)无法登录,提示错误:ORA-01017: invalid username/password; logon denied 错误(程序中的用户和密码无法登录 ...

  9. 用户'sa'登录失败(错误18456)解决方案图解

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://thenear.blog.51cto.com/4686262/865544 htt ...

随机推荐

  1. BZOJ1207_打鼹鼠_KEY

    [HNOI2004]打鼹鼠 Time Limit: 10 Sec Memory Limit: 162 MB Description 鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地 ...

  2. Atlas框架介绍集成(一)

    Atlas是什么? Atlas是一个Android客户端容器框架,主要提供了组件化.动态性.解耦化的支持.支持在编码期.Apk运行期以及后续运维修复期的各种问题. 在工程期,实现工程独立开发,调试功能 ...

  3. myeclipse快捷键(转载)

    非常感谢分享这篇文章的大虾..但是我忘了几下您的blog地址,因此无法注明原文地址...见谅哈 存盘 Ctrl+s(肯定知道) 注释代码 Ctrl+/ 取消注释 Ctrl+\(Eclipse3已经都合 ...

  4. .NET十年回顾

    一.   引子 从我还是编程菜鸟时起,.NET就从来没让我失望过.总是惊喜不断. 当年我第一个项目是做个进销存.用的Winform.当时我是机电工程师.编程只是业余心血来潮而已. .NET的低门槛.V ...

  5. Maximum 贪心

    Maximum Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Des ...

  6. 【重点突破】——使用Express创建一个web服务器

    一.引言 在自学node.js的过程中有一个非常重要的框架,那就是Express.它是一个基于NodeJs http模块而编写的高层模块,弥补http模块的繁琐和不方便,能够快速开发http服务器.这 ...

  7. PHP字符串函数-trim()实例用法

    string trim ( string $str [, string $charlist = " \t\n\r\0\x0B" ] )此函数返回字符串 str 去除首尾空白字符后的 ...

  8. 【Java核心】ClassLoader原理及其使用

    又把博客的皮肤换了换,看着更加简洁舒心一些.前段的知识只是略懂,拿过来就能用,只是自己的审美和设计水平有限,实在难以弄出自己特别满意的东西,也算是小小的遗憾吧!言归正传,由于最近涉及到Java核心的东 ...

  9. C#仪器数据文件解析-Excel文件(xls、xlsx)

    不少仪器工作站可以将数据导出为Excel文件,包括97-2003版本的xls文件和2007+的xlsx文件. 采集Excel文件相比采集pdf文件更容易.程序更健壮,毕竟Excel中数据有明确的行.列 ...

  10. http中错误代码的含义整理

    HTTP网页错误代码大全带解释 HTTP 400 - 请求无效HTTP 401.1 - 未授权:登录失败HTTP 401.2 - 未授权:服务器配置问题导致登录失败HTTP 401.3 - ACL 禁 ...