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

首頁 > 編程 > Python > 正文

基于Django的python驗證碼(實例講解)

2020-02-16 10:27:11
字體:
來源:轉載
供稿:網友

驗證碼

在用戶注冊、登錄頁面,為了防止暴力請求,可以加入驗證碼功能,如果驗證碼錯誤,則不需要繼續處理,可以減輕一些服務器的壓力

使用驗證碼也是一種有效的防止crsf的方法

驗證碼效果如下圖:

驗證碼視圖

新建viewsUtil.py,定義函數verifycode

此段代碼用到了PIL中的Image、ImageDraw、ImageFont模塊,需要先安裝Pillow(3.4.1)包,

詳細文檔參考 http://pillow.readthedocs.io/en/3.4.x/

Image表示畫布對象

ImageDraw表示畫筆對象

ImageFont表示字體對象,ubuntu的字體路徑為“/usr/share/fonts/truetype/freefont”

代碼如下:

from django.http import HttpResponsedef verifycode(request): #引入繪圖模塊 from PIL import Image, ImageDraw, ImageFont #引入隨機函數模塊 import random #定義變量,用于畫面的背景色、寬、高 bgcolor = (random.randrange(20, 100), random.randrange(  20, 100), 255) width = 100 height = 25 #創建畫面對象 im = Image.new('RGB', (width, height), bgcolor) #創建畫筆對象 draw = ImageDraw.Draw(im) #調用畫筆的point()函數繪制噪點 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) #定義驗證碼的備選值 str1 = 'ABCD123EFGHIJK456LMNOPQRS789TUVWXYZ0' #隨機選取4個值作為驗證碼 rand_str = '' for i in range(0, 4):  rand_str += str1[random.randrange(0, len(str1))] #構造字體對象 font = ImageFont.truetype('FreeMono.ttf', 23) #構造字體顏色 fontcolor = (255, random.randrange(0, 255), random.randrange(0, 255)) #繪制4個字 draw.text((5, 2), rand_str[0], font=font, fill=fontcolor) draw.text((25, 2), rand_str[1], font=font, fill=fontcolor) draw.text((50, 2), rand_str[2], font=font, fill=fontcolor) draw.text((75, 2), rand_str[3], font=font, fill=fontcolor) #釋放畫筆 del draw #存入session,用于做進一步驗證 request.session['verifycode'] = rand_str #內存文件操作 import io buf = io.StringIO() #將圖片保存在內存中,文件類型為png im.save(buf, 'png') #將內存中的圖片數據返回給客戶端,MIME類型為圖片png return HttpResponse(buf.getvalue(), 'image/png')

配置url

在urls.py中定義請求驗證碼視圖的url

from . import viewsUtilurlpatterns = [ url(r'^verifycode/$', viewsUtil.verifycode),]

顯示驗證碼

•在模板中使用img標簽,src指向驗證碼視圖

<img id='verifycode' src="/verifycode/" alt="CheckCode"/>

•啟動服務器,查看顯示成功

•擴展:點擊“看不清,換一個”時,可以換一個新的驗證碼

<script type="text/javascript" src="/static/jquery-1.12.4.min.js"></script><script type="text/javascript">  $(function(){    $('#verifycodeChange').css('cursor','pointer').click(function() {      $('#verifycode').attr('src',$('#verifycode').attr('src')+1)    });  });</script><img id='verifycode' src="/verifycode/?1" alt="CheckCode"/><span id='verifycodeChange'>看不清,換一個</span>            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阜新市| 邹城市| 岫岩| 新民市| 广元市| 南江县| 临武县| 湄潭县| 红河县| 泸西县| 正定县| 泾川县| 德钦县| 永登县| 苍南县| 皋兰县| 虹口区| 建瓯市| 称多县| 潞城市| 祥云县| 电白县| 盐边县| 富裕县| 定安县| 宣威市| 黑龙江省| 丰都县| 锦屏县| 安新县| 满洲里市| 吉首市| 临汾市| 城市| 嵊泗县| 丰都县| 湖口县| 河间市| 通渭县| 尤溪县| 庆云县|