溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Django框架登錄加上驗(yàn)證碼校驗(yàn)實(shí)現(xiàn)驗(yàn)證功能示例

發(fā)布時(shí)間:2020-08-30 04:18:30 來源:腳本之家 閱讀:414 作者:SpecYue 欄目:開發(fā)技術(shù)

本文實(shí)例講述了Django框架登錄加上驗(yàn)證碼校驗(yàn)實(shí)現(xiàn)驗(yàn)證功能。分享給大家供大家參考,具體如下:

驗(yàn)證碼生成函數(shù)

pip install Pillow

# /verify_code
def verif_ycode(request):
  #引入繪圖模塊
  from PIL import Image, ImageDraw, ImageFont
  #引入隨機(jī)函數(shù)模塊
  import random
  #定義變量,用于畫面的背景色、寬、高
  bgcolor = (random.randrange(20, 100), random.randrange(
    20, 100), random.randrange(20, 100))
  width = 100
  height = 50
  #創(chuàng)建畫面對象
  im = Image.new('RGB', (width, height), bgcolor)
  #創(chuàng)建畫筆對象
  draw = ImageDraw.Draw(im)
  #調(diào)用畫筆的point()函數(shù)繪制噪點(diǎn)
  for i in range(0, 100):
    xy = (random.randrange(0, width), random.randrange(0, height))
    fill = (random.randrange(0, 255), 255, random.randrange(0, 255))
    draw.point(xy, fill=fill)
  #定義驗(yàn)證碼的備選值
  str = '1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'
  #隨機(jī)選取4個(gè)值作為驗(yàn)證碼
  rand_str = ''
  for i in range(0, 4):
    rand_str += str[random.randrange(0, len(str))]
  #構(gòu)造字體對象
  # font = ImageFont.truetype('楷體', 40)
  #構(gòu)造字體顏色
  fontcolor1 = (255, random.randrange(0, 255), random.randrange(0, 255))
  fontcolor2 = (255, random.randrange(0, 255), random.randrange(0, 255))
  fontcolor3 = (255, random.randrange(0, 255), random.randrange(0, 255))
  fontcolor4 = (255, random.randrange(0, 255), random.randrange(0, 255))
  #繪制4個(gè)字
  draw.text((5, 2), rand_str[0], fill=fontcolor1)
  draw.text((25, 2), rand_str[1], fill=fontcolor2)
  draw.text((50, 2), rand_str[2], fill=fontcolor3)
  draw.text((75, 2), rand_str[3], fill=fontcolor4)
  #釋放畫筆
  del draw
  # 存入session,用于做進(jìn)一步驗(yàn)證
  request.session['verifycode'] = rand_str
  #內(nèi)存文件操作
  import io
  buf = io.BytesIO()
  #將圖片保存在內(nèi)存中,文件類型為png
  im.save(buf, 'png')
  #將內(nèi)存中的圖片數(shù)據(jù)返回給客戶端,MIME類型為圖片png
  return HttpResponse(buf.getvalue(), 'image/png')

login.html

html文件加上<img src="/verify_code" alt="">…當(dāng)然這里還需要配置url,去urls.py里url(r'^verify_code$',views.verif_ycode),

login_check視圖函數(shù)里加上驗(yàn)證碼校驗(yàn)

首先拿到用戶輸入的驗(yàn)證碼和def verif_ycode(request):函數(shù)保存在session中的驗(yàn)證碼

# 獲取驗(yàn)證碼
vcode1 = request.POST.get('vcode')# 用戶輸入的驗(yàn)證碼
vcode2 = request.session.get('verifycode')# 獲取session中保存的驗(yàn)證碼

判斷是否一樣,不一樣的話就redirct('/login')跳轉(zhuǎn)到登錄頁面

if vcode1 != vcode2:
  return redirect('/login')
else:

否則向下運(yùn)行

希望本文所述對大家基于Django框架的Python程序設(shè)計(jì)有所幫助。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI