亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

我的思路是:

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

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

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

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

這樣我們就來(lái)設(shè)計(jì)我們的數(shù)據(jù)庫(kù):

 class User(AbstractUser):
  avatar=models.ImageField(upload_to='vaatar/%Y/%m',default='vaatar/default/pang')
  qq=models.CharField(u'qq號(hào)碼', max_length=20,blank=True)
  mobile=models.CharField(u'手機(jī)號(hào)',max_length=11,blank=True,null=True,unique=True)
  login_sta = models.CharField(u'登錄是否鎖定', max_length=2, default=0)
  login_suo = models.DateTimeField(u'登錄鎖定時(shí)間')
  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默認(rèn)的用戶來(lái)進(jìn)行設(shè)計(jì)的,

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

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

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

具體的實(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í)只能登陸一臺(tái)設(shè)備!'})
      if user.login_sta==True:
        return render(request, 'login.html', {'msg': '賬號(hào)已經(jīng)凍結(jié)!'})
      if (datetime.datetime.now()-user.login_suo).total_seconds() <600:
        return render(request, 'login.html', {'msg': '賬號(hào)鎖定十分鐘內(nèi)不能登陸!'})
      if user.pass_errnum>5:
        user.login_suo=datetime.datetime.now()
        return render(request, 'login.html', {'msg': '密碼輸入超過(guò)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': '密碼錯(cuò)誤'})
    except:
      return render(request,'login.html',{'msg':'用戶名不存在!'})

整體的思路以及實(shí)現(xiàn),我們來(lái)實(shí)驗(yàn)下,這里的補(bǔ)充下,之前的我們的注冊(cè)的密碼,是按照原來(lái)的直接儲(chǔ)存密碼的,這樣來(lái)說(shuō)是不安全的,我們來(lái)使用django自帶的進(jìn)行密碼加密解密。

我們來(lái)體驗(yàn)下我們的程序!    

用戶已經(jīng)登錄了,我們?cè)诹硪慌_(tái)設(shè)備來(lái)退出我們的賬號(hào)就可以

這樣我們輸入6次,就鎖定了這個(gè)賬號(hào),同時(shí)也給我們記錄了鎖定時(shí)間。

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

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)給修改下。這樣一個(gè)簡(jiǎn)單的限制用戶登錄時(shí)候輸入密碼次數(shù)的鎖定就這么簡(jiǎn)單的實(shí)現(xiàn)了。

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

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • CentOS7下安裝python3.6.8的教程詳解

    CentOS7下安裝python3.6.8的教程詳解

    這篇文章主要介紹了CentOS7下安裝python3.6.8的教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Python答題卡識(shí)別并給出分?jǐn)?shù)的實(shí)現(xiàn)代碼

    Python答題卡識(shí)別并給出分?jǐn)?shù)的實(shí)現(xiàn)代碼

    本文帶領(lǐng)大家學(xué)習(xí)Python答題卡識(shí)別并給出分?jǐn)?shù)的實(shí)現(xiàn)代碼,代碼實(shí)現(xiàn)思路清晰,簡(jiǎn)單易懂,Python識(shí)別答題卡相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-06-06
  • python多繼承(鉆石繼承)問(wèn)題和解決方法簡(jiǎn)單示例

    python多繼承(鉆石繼承)問(wèn)題和解決方法簡(jiǎn)單示例

    這篇文章主要介紹了python多繼承(鉆石繼承)問(wèn)題和解決方法,結(jié)合實(shí)例形式分析了Python多繼承調(diào)用父類初始化方法相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • Python+tkinter實(shí)現(xiàn)音樂(lè)下載軟件的制作

    Python+tkinter實(shí)現(xiàn)音樂(lè)下載軟件的制作

    平常我們下載的歌曲,都是各種妖魔鬼怪的格式橫行,想下載下來(lái)用一下都不行,還只能在它的播放器內(nèi)聽(tīng),這誰(shuí)受得了~本文就來(lái)用Python制作個(gè)音樂(lè)下載軟件,需要的可以參考一下
    2022-09-09
  • pandas實(shí)現(xiàn)datetime64與unix時(shí)間戳互轉(zhuǎn)

    pandas實(shí)現(xiàn)datetime64與unix時(shí)間戳互轉(zhuǎn)

    這篇文章主要介紹了pandas實(shí)現(xiàn)datetime64與unix時(shí)間戳互轉(zhuǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Python處理字符串的常用函數(shù)實(shí)例總結(jié)

    Python處理字符串的常用函數(shù)實(shí)例總結(jié)

    在數(shù)據(jù)分析中,特別是文本分析中,字符處理需要耗費(fèi)極大的精力,因而了解字符處理對(duì)于數(shù)據(jù)分析而言,也是一項(xiàng)很重要的能力,這篇文章主要給大家介紹了關(guān)于Python處理字符串的常用函數(shù),需要的朋友可以參考下
    2021-11-11
  • 詳解BeautifulSoup獲取特定標(biāo)簽下內(nèi)容的方法

    詳解BeautifulSoup獲取特定標(biāo)簽下內(nèi)容的方法

    這篇文章主要介紹了詳解BeautifulSoup獲取特定標(biāo)簽下內(nèi)容的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • python實(shí)現(xiàn)二叉排序樹(shù)

    python實(shí)現(xiàn)二叉排序樹(shù)

    這篇文章主要介紹了python實(shí)現(xiàn)二叉排序樹(shù),
    2022-01-01
  • Python多進(jìn)程同步簡(jiǎn)單實(shí)現(xiàn)代碼

    Python多進(jìn)程同步簡(jiǎn)單實(shí)現(xiàn)代碼

    這篇文章主要介紹了Python多進(jìn)程同步簡(jiǎn)單實(shí)現(xiàn)代碼,涉及Python基于Process與Lock模塊運(yùn)行進(jìn)程與鎖機(jī)制實(shí)現(xiàn)多進(jìn)程同步的相關(guān)技巧,需要的朋友可以參考下
    2016-04-04
  • 查看Python安裝路徑以及安裝包路徑小技巧

    查看Python安裝路徑以及安裝包路徑小技巧

    這篇文章主要介紹了查看Python安裝路徑以及安裝包路徑小技巧,本文使用直接在命令行運(yùn)行Python代碼的方法檢測(cè)安裝路徑以及安裝包路徑,需要的朋友可以參考下
    2015-04-04

最新評(píng)論