国产探花免费观看_亚洲丰满少妇自慰呻吟_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>            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 监利县| 孟州市| 理塘县| 太保市| 松阳县| 邮箱| 珠海市| 城口县| 泊头市| 嵊泗县| 合阳县| 西宁市| 和田市| 瓦房店市| 沂南县| 泸定县| 惠水县| 钦州市| 高要市| 波密县| 太白县| 义马市| 介休市| 屏山县| 南陵县| 治县。| 大港区| 明水县| 石阡县| 正安县| 绥宁县| 安阳县| 双鸭山市| 红原县| 太和县| 九龙坡区| 宁国市| 永昌县| 禄劝| 呼玛县| 北海市|