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

首頁 > 編程 > Python > 正文

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

2020-01-04 16:38:31
字體:
供稿:網(wǎng)友

驗證碼

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

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

驗證碼效果如下圖:

python,驗證碼

驗證碼視圖

新建viewsUtil.py,定義函數(shù)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 #引入隨機函數(shù)模塊 import random #定義變量,用于畫面的背景色、寬、高 bgcolor = (random.randrange(20, 100), random.randrange(  20, 100), 255) width = 100 height = 25 #創(chuàng)建畫面對象 im = Image.new('RGB', (width, height), bgcolor) #創(chuàng)建畫筆對象 draw = ImageDraw.Draw(im) #調(diào)用畫筆的point()函數(shù)繪制噪點 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))] #構(gòu)造字體對象 font = ImageFont.truetype('FreeMono.ttf', 23) #構(gòu)造字體顏色 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 #內(nèi)存文件操作 import io buf = io.StringIO() #將圖片保存在內(nèi)存中,文件類型為png im.save(buf, 'png') #將內(nèi)存中的圖片數(shù)據(jù)返回給客戶端,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/"  $(function(){    $('#verifycodeChange').css('cursor','pointer').click(function() {      $('#verifycode').attr('src',$('#verifycode').attr('src')+1)    });  });</script><img id='verifycode' src="/verifycode/?1"  <input type="text" name="vc">  <img id='verifycode' src="/verifycode/?1"  vc = request.POST['vc']  if vc.upper() == request.session['verifycode']:    return HttpResponse('ok')  else:    return HttpResponse('no')

•配置驗證處理的url

urlpatterns = [  url(r'^verifycodeValid/$', views.verifycodeValid),]

以上這篇基于Django的python驗證碼(實例講解)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網(wǎng)。


注:相關教程知識閱讀請移步到python教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宜兰县| 重庆市| 长宁区| 白山市| 绩溪县| 朝阳县| 阿克苏市| 神农架林区| 淅川县| 东乡族自治县| 奉化市| 惠州市| 万山特区| 涞源县| 绥化市| 阳泉市| 麦盖提县| 禄丰县| 上思县| 太和县| 岫岩| 会宁县| 长武县| 郴州市| 综艺| 阳西县| 米泉市| 花莲县| 淅川县| 曲周县| 集贤县| 安仁县| 成都市| 会东县| 崇州市| 枞阳县| 石景山区| 梁河县| 朝阳市| 威远县| 罗定市|