最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2017年11月05日 09:07:36   作者:北漂的雷子  
這篇文章主要介紹了django實現(xiàn)登錄時候輸入密碼錯誤5次鎖定用戶十分鐘,具有一定的參考價值,感興趣的小伙伴們可以參考一下

在學習django的時候,想要實現(xiàn)登錄失敗后,進行用戶鎖定,切記錄鎖定時間,在網(wǎng)上找了很多資料,但是都感覺不是那么靠譜,于是乎,我開始了我的設(shè)計,其實我一開始想要借助redis呢,但是想要先開發(fā)一個簡單的,后續(xù)在拆分后,然后在去進行拆分, 這樣也是很接近我們在真實的開發(fā)中所遇到問題。

我的思路是:

    輸入賬號密碼》是否已經(jīng)登錄》提示已經(jīng)登錄

    輸入賬號密碼》錯誤次數(shù)少于6次》校驗密碼》登錄成功,記錄登錄時間,錯誤次數(shù)清空,記錄登錄狀態(tài)

    輸入賬號密碼》錯誤大于六次》提示鎖定,并且記錄錯誤次數(shù)

    輸入賬號密碼》是否凍結(jié)》提示凍結(jié)

這樣我們就來設(shè)計我們的數(shù)據(jù)庫:

 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'用戶密碼輸入次數(shù)',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默認的用戶來進行設(shè)計的,

那么我們同步我們的數(shù)據(jù)庫。

同步后我們來看看我們的數(shù)據(jù)庫,

整體結(jié)構(gòu)出來了,我們來設(shè)計我們的登錄用戶的視圖,這里還是采用面向?qū)ο蟮姆绞絹碓O(shè)計我們的登錄視圖,  

具體的實現(xiàn)如下:    

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': '同時只能登陸一臺設(shè)備!'})
      if user.login_sta==True:
        return render(request, 'login.html', {'msg': '賬號已經(jīng)凍結(jié)!'})
      if (datetime.datetime.now()-user.login_suo).total_seconds() <600:
        return render(request, 'login.html', {'msg': '賬號鎖定十分鐘內(nèi)不能登陸!'})
      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':'用戶名不存在!'})

整體的思路以及實現(xiàn),我們來實驗下,這里的補充下,之前的我們的注冊的密碼,是按照原來的直接儲存密碼的,這樣來說是不安全的,我們來使用django自帶的進行密碼加密解密。

我們來體驗下我們的程序!    

用戶已經(jīng)登錄了,我們在另一臺設(shè)備來退出我們的賬號就可以

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

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

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('/')


退出我們就記錄退出的,把登錄狀態(tài)給修改下。這樣一個簡單的限制用戶登錄時候輸入密碼次數(shù)的鎖定就這么簡單的實現(xiàn)了。

 這樣一個簡單的django限制用戶登錄的時候密碼輸入次數(shù)就得到了解決。個人感覺十分方便。

這樣做可能后期用戶量大,會增加數(shù)據(jù)庫的壓力,后續(xù)可以吧這一塊優(yōu)化到我們的redis服務(wù)器中去。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

山阴县| 理塘县| 那曲县| 鹤岗市| 巩义市| 弥勒县| 山东省| 九江市| 泾阳县| 同心县| 苏尼特右旗| 辉县市| 丹江口市| 小金县| 镇雄县| 霍城县| 芮城县| 方正县| 印江| 安新县| 宜兰县| 苗栗县| 武冈市| 仙游县| 湖州市| 永登县| 横山县| 岑溪市| 清原| 扶风县| 枣阳市| 阿瓦提县| 惠水县| 平阴县| 建水县| 班玛县| 博野县| 临猗县| 兴安盟| 双城市| 梅河口市|