django--驗證碼功能實現
阿新 • • 發佈:2019-03-01
save size 路由 登錄 session range 需要 圖片庫 spa
首先建立驗證碼的視圖函數
1需要安裝pillow庫
#導入繪圖庫 from PIL import ImageDraw #導入繪圖字體庫 from PIL import ImageFont #導入圖片庫 from PIL import Image #導入io庫 import io #導入隨機庫 import random
1,定義驗證碼圖片
#定義隨機顏色方法 def get_random_color(): R = random.randrange(255) G = random.randrange(255) B= random.randrange(255) return (R,G,B) #定義隨機驗證碼 def test_captcha(request): #定義背景顏色 bg_color = get_random_color() #定義畫布大小 寬,高 img_size = (150,80) #定義畫筆 顏色種類,畫布,背景顏色 image = Image.new("RGB",img_size,bg_color) #定義畫筆對象 圖片對象,顏色類型 draw = ImageDraw.Draw(image,‘RGB‘) #定義隨機字符 source = ‘0123456789asdfghjkl‘ #定義四個字符 #定義好容器,用來接收隨機字符串 code_str = ‘‘ for i in range(4): #獲取隨機顏色 字體顏色 text_color = get_random_color() #獲取隨機字符串 tmp_num = random.randrange(len(source)) #獲取字符集 random_str = source[tmp_num]#將隨機生成的字符串添加到容器中 code_str += random_str #將字符畫到畫布上 坐標,字符串,字符串顏色,字體 #導入系統真實字體,字號 my_font = ImageFont.truetype("c:\\windows\\Fonts\\arial.ttf",20) draw.text((10+30*i,20),random_str,text_color,font=my_font) #使用io獲取一個緩存區 buf = io.BytesIO() #將圖片保存到緩存區 image.save(buf,‘png‘) #將隨機碼存儲到session中 request.session[‘code‘] = code_str #第二個參數聲明頭部信息 return HttpResponse(buf.getvalue(),‘image/png‘)
2前端定義驗證碼圖片和輸入輸入驗證碼
{# 利用clcik時間來刷新驗證碼 #}{# 通過樣式來改變懸停時的圖標 #} <img style="cursor:pointer;" src="/captcha" onclick=‘this.src=this.src+"?"+Math.random()‘ /> <input name=‘code‘ type="text" />
3.定義驗證碼路由,並在登錄時根據前端name 獲取用戶輸入的驗證碼與存入session的驗證碼比對實現其功能
django--驗證碼功能實現