Django實現(xiàn)隨機圖形驗證碼的示例
更新時間:2020年10月15日 16:26:04 作者:日天達人
這篇文章主要介紹了Django實現(xiàn)隨機圖形驗證碼的示例,幫助大家更好的學(xué)習(xí)和使用django框架,感興趣的朋友可以了解下
實現(xiàn)效果:點擊右邊圖片驗證碼會變

前端代碼:
<div class="container">
<div class="row">
<div class="col-md-6">
<label for="yzm_id">驗證碼:</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è)置為(*,*,*),所以隨機返回三個數(shù)
def r_num(number):
#number為2指的是背景顏色,把背景顏色和字體顏色分開,不然當(dāng)顏色一樣時,不容易看到
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)建一個Image對象,‘RGB'是顏色的模式。第二個參數(shù)是驗證碼的大小。第三個參數(shù)是三個隨機數(shù),當(dāng)然也用英語單詞指定顏色,比如red,這里為了隨機性選擇了用三個數(shù)字
yzm_img=Image.new("RGB",(260,40),r_num(1))
#為yzm_img對象創(chuàng)建一個畫筆
draw=ImageDraw.Draw(yzm_img)
#指定字體的格式,ttf文件自己在網(wǎng)上下載,放入static文件夾中,40指的是字體的大小
font=ImageFont.truetype('static/1.ttf',40)
#存放驗證碼
code=''
#循環(huán)5次,所以驗證碼是5位
for i in range(5):
#隨機0到9的數(shù)字
random_num=str(random.randint(0,9))
#隨機65到90的數(shù)字,chr是把數(shù)字對比ASCLL碼表轉(zhuǎn)為字母。65到90是大寫字母
random_up=str(chr(random.randint(65,90)))
#同上,隨機小寫字母
random_low=str(chr(random.randint(97,122)))
#從三個字符中隨機選取出一個
random_code=random.choice([random_num,random_up,random_low])
#把字符寫入圖片。第一個參數(shù)(x,y),坐標(biāo),如果坐標(biāo)位置寫死,那么將會全部擠到一起,第二個參數(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中添加驗證碼
request.session['code']=code
#返回二進制數(shù)據(jù)
return HttpResponse(io_obj.getvalue())
現(xiàn)在刷新就可以刷新驗證碼了
還差點擊驗證碼就能更換驗證碼
前端腳本代碼:
這里這么寫是因為只要在地址后面加上字符,那么就刷新圖片
$('#yzm_img_id').click(function () {
var path2 = $(this).attr('src');
$(this).attr('src', path2 += '?')
});
以上就是Django實現(xiàn)隨機圖形驗證碼的示例的詳細內(nèi)容,更多關(guān)于Django 圖形驗證碼的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python多進程庫multiprocessing中進程池Pool類的使用詳解
這篇文章主要介紹了Python多進程庫multiprocessing中進程池Pool類的使用詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11
PyTorch中Tensor的數(shù)據(jù)統(tǒng)計示例
今天小編就為大家分享一篇PyTorch中Tensor的數(shù)據(jù)統(tǒng)計示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02

