Django實(shí)現(xiàn)隨機(jī)圖形驗(yàn)證碼的示例
實(shí)現(xiàn)效果:點(diǎn)擊右邊圖片驗(yàn)證碼會(huì)變
前端代碼:
<div class="container"> <div class="row"> <div class="col-md-6"> <label for="yzm_id">驗(yàn)證碼:</label> <input type="text" class="form-control" id="yzm_id" placeholder="" name="yzm"> </div> <div class="col-md-6"> <img id='yzm_img_id' src="/yzm/" alt="" style="width: 260px;height: 40px"> </div> </div> <div>
后端代碼:
from PIL import Image,ImageDraw,ImageFont from io import BytesIO,StringIO #色彩的設(shè)置為(*,*,*),所以隨機(jī)返回三個(gè)數(shù) def r_num(number): #number為2指的是背景顏色,把背景顏色和字體顏色分開,不然當(dāng)顏色一樣時(shí),不容易看到 if number==2: return random.randint(0,128),random.randint(0,128),random.randint(0,128) #number==1指的是字體顏色,字體顏色深一些比較養(yǎng)眼 if number == 1: return random.randint(128, 255), random.randint(128, 255), random.randint(128, 255) def yzm(request): #創(chuàng)建一個(gè)Image對(duì)象,‘RGB'是顏色的模式。第二個(gè)參數(shù)是驗(yàn)證碼的大小。第三個(gè)參數(shù)是三個(gè)隨機(jī)數(shù),當(dāng)然也用英語單詞指定顏色,比如red,這里為了隨機(jī)性選擇了用三個(gè)數(shù)字 yzm_img=Image.new("RGB",(260,40),r_num(1)) #為yzm_img對(duì)象創(chuàng)建一個(gè)畫筆 draw=ImageDraw.Draw(yzm_img) #指定字體的格式,ttf文件自己在網(wǎng)上下載,放入static文件夾中,40指的是字體的大小 font=ImageFont.truetype('static/1.ttf',40) #存放驗(yàn)證碼 code='' #循環(huán)5次,所以驗(yàn)證碼是5位 for i in range(5): #隨機(jī)0到9的數(shù)字 random_num=str(random.randint(0,9)) #隨機(jī)65到90的數(shù)字,chr是把數(shù)字對(duì)比ASCLL碼表轉(zhuǎn)為字母。65到90是大寫字母 random_up=str(chr(random.randint(65,90))) #同上,隨機(jī)小寫字母 random_low=str(chr(random.randint(97,122))) #從三個(gè)字符中隨機(jī)選取出一個(gè) random_code=random.choice([random_num,random_up,random_low]) #把字符寫入圖片。第一個(gè)參數(shù)(x,y),坐標(biāo),如果坐標(biāo)位置寫死,那么將會(huì)全部擠到一起,第二個(gè)參數(shù),指定寫入的字符。第三參數(shù)指定字符的格式 draw.text((45*i,-5),random_code,r_num(2),font) code+=random_code io_obj=BytesIO() #把圖片存放到內(nèi)存空間中 yzm_img.save(io_obj,'png') #給session中添加驗(yàn)證碼 request.session['code']=code #返回二進(jìn)制數(shù)據(jù) return HttpResponse(io_obj.getvalue())
現(xiàn)在刷新就可以刷新驗(yàn)證碼了
還差點(diǎn)擊驗(yàn)證碼就能更換驗(yàn)證碼
前端腳本代碼:
這里這么寫是因?yàn)橹灰诘刂泛竺婕由献址敲淳退⑿聢D片
$('#yzm_img_id').click(function () { var path2 = $(this).attr('src'); $(this).attr('src', path2 += '?') });
以上就是Django實(shí)現(xiàn)隨機(jī)圖形驗(yàn)證碼的示例的詳細(xì)內(nèi)容,更多關(guān)于Django 圖形驗(yàn)證碼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 淺談django channels 路由誤導(dǎo)
- 詳解Django-channels 實(shí)現(xiàn)WebSocket實(shí)例
- Django使用Channels實(shí)現(xiàn)WebSocket的方法
- Django Channels 實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)實(shí)時(shí)聊天和消息推送功能
- django使用channels2.x實(shí)現(xiàn)實(shí)時(shí)通訊
- Django3.0 異步通信初體驗(yàn)(小結(jié))
- Django+uni-app實(shí)現(xiàn)數(shù)據(jù)通信中的請(qǐng)求跨域的示例代碼
- django使用channels實(shí)現(xiàn)通信的示例
相關(guān)文章
使用Python實(shí)現(xiàn)簡(jiǎn)單的爬蟲框架
爬蟲是一種自動(dòng)獲取網(wǎng)頁(yè)內(nèi)容的程序,它可以幫助我們從網(wǎng)絡(luò)上快速收集大量信息。下面我們將學(xué)習(xí)如何使用 Python 編寫一個(gè)簡(jiǎn)單的爬蟲框架,感興趣的可以了解一下2023-05-05python實(shí)現(xiàn)引用其他路徑包里面的模塊
這篇文章主要介紹了python實(shí)現(xiàn)引用其他路徑包里面的模塊,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03python 返回一個(gè)列表中第二大的數(shù)方法
今天小編就為大家分享一篇python 返回一個(gè)列表中第二大的數(shù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-07-07Python多進(jìn)程庫(kù)multiprocessing中進(jìn)程池Pool類的使用詳解
這篇文章主要介紹了Python多進(jìn)程庫(kù)multiprocessing中進(jìn)程池Pool類的使用詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11PyTorch中Tensor的數(shù)據(jù)統(tǒng)計(jì)示例
今天小編就為大家分享一篇PyTorch中Tensor的數(shù)據(jù)統(tǒng)計(jì)示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02