国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

django實現登錄時候輸入密碼錯誤5次鎖定用戶十分鐘

2020-01-04 16:28:07
字體:
來源:轉載
供稿:網友

在學習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,登錄輸入密碼錯誤鎖定,django登錄密碼錯誤鎖定,django密碼錯誤鎖定用戶

整體結構出來了,我們來設計我們的登錄用戶的視圖,這里還是采用面向對象的方式來設計我們的登錄視圖,  

具體的實現如下:    

from django.contrib.auth.hashers import make_password, check_passwordfrom django.http import Http404, HttpResponseRedirectfrom django.shortcuts import render, redirectfrom django.views.generic.base import Viewclass 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,登錄輸入密碼錯誤鎖定,django登錄密碼錯誤鎖定,django密碼錯誤鎖定用戶

用戶已經登錄了,我們在另一臺設備來退出我們的賬號就可以

django,登錄輸入密碼錯誤鎖定,django登錄密碼錯誤鎖定,django密碼錯誤鎖定用戶

這樣我們輸入6次,就鎖定了這個賬號,同時也給我們記錄了鎖定時間。

django,登錄輸入密碼錯誤鎖定,django登錄密碼錯誤鎖定,django密碼錯誤鎖定用戶

 其實這里我們推出的模塊的設計如下:

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桐梓县| 专栏| 金秀| 民乐县| 突泉县| 南皮县| 宣化县| 镇坪县| 德化县| 乌鲁木齐县| 商水县| 南乐县| 哈密市| 晋宁县| 宁明县| 婺源县| 贵港市| 明溪县| 西贡区| 衡南县| 青浦区| 北川| 五寨县| 永城市| 柞水县| 淄博市| 吴川市| 拉萨市| 赣州市| 罗山县| 虞城县| 鸡东县| 穆棱市| 宣汉县| 饶平县| 永和县| 镇宁| 商河县| 庆安县| 定兴县| 扶余县|