基于Django的python驗(yàn)證碼(實(shí)例講解)
驗(yàn)證碼
在用戶注冊(cè)、登錄頁(yè)面,為了防止暴力請(qǐng)求,可以加入驗(yàn)證碼功能,如果驗(yàn)證碼錯(cuò)誤,則不需要繼續(xù)處理,可以減輕一些服務(wù)器的壓力
使用驗(yàn)證碼也是一種有效的防止crsf的方法
驗(yàn)證碼效果如下圖:

驗(yàn)證碼視圖
新建viewsUtil.py,定義函數(shù)verifycode
此段代碼用到了PIL中的Image、ImageDraw、ImageFont模塊,需要先安裝Pillow(3.4.1)包,
詳細(xì)文檔參考 http://pillow.readthedocs.io/en/3.4.x/
Image表示畫布對(duì)象
ImageDraw表示畫筆對(duì)象
ImageFont表示字體對(duì)象,ubuntu的字體路徑為“/usr/share/fonts/truetype/freefont”
代碼如下:
from django.http import HttpResponse
def verifycode(request):
#引入繪圖模塊
from PIL import Image, ImageDraw, ImageFont
#引入隨機(jī)函數(shù)模塊
import random
#定義變量,用于畫面的背景色、寬、高
bgcolor = (random.randrange(20, 100), random.randrange(
20, 100), 255)
width = 100
height = 25
#創(chuàng)建畫面對(duì)象
im = Image.new('RGB', (width, height), bgcolor)
#創(chuàng)建畫筆對(duì)象
draw = ImageDraw.Draw(im)
#調(diào)用畫筆的point()函數(shù)繪制噪點(diǎn)
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)
#定義驗(yàn)證碼的備選值
str1 = 'ABCD123EFGHIJK456LMNOPQRS789TUVWXYZ0'
#隨機(jī)選取4個(gè)值作為驗(yàn)證碼
rand_str = ''
for i in range(0, 4):
rand_str += str1[random.randrange(0, len(str1))]
#構(gòu)造字體對(duì)象
font = ImageFont.truetype('FreeMono.ttf', 23)
#構(gòu)造字體顏色
fontcolor = (255, random.randrange(0, 255), random.randrange(0, 255))
#繪制4個(gè)字
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,用于做進(jìn)一步驗(yàn)證
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中定義請(qǐng)求驗(yàn)證碼視圖的url
from . import viewsUtil urlpatterns = [ url(r'^verifycode/$', viewsUtil.verifycode), ]
顯示驗(yàn)證碼
•在模板中使用img標(biāo)簽,src指向驗(yàn)證碼視圖
<img id='verifycode' src="/verifycode/" alt="CheckCode"/>
•啟動(dòng)服務(wù)器,查看顯示成功
•擴(kuò)展:點(diǎn)擊“看不清,換一個(gè)”時(shí),可以換一個(gè)新的驗(yàn)證碼
<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'>看不清,換一個(gè)</span>
•為了能夠?qū)崿F(xiàn)提交功能,需要增加form和input標(biāo)簽
<form method='post' action='/verifycodeValid/'> <input type="text" name="vc"> <img id='verifycode' src="/verifycode/?1" alt="CheckCode"/> <span id='verifycodeChange'>看不清,換一個(gè)</span> <br> <input type="submit" value="提交"> </form>
驗(yàn)證
•接收請(qǐng)求的信息,與session中的內(nèi)容對(duì)比
from django.http import HttpResponse
def verifycodeValid(request):
vc = request.POST['vc']
if vc.upper() == request.session['verifycode']:
return HttpResponse('ok')
else:
return HttpResponse('no')
•配置驗(yàn)證處理的url
urlpatterns = [ url(r'^verifycodeValid/$', views.verifycodeValid), ]
以上這篇基于Django的python驗(yàn)證碼(實(shí)例講解)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Django自定義插件實(shí)現(xiàn)網(wǎng)站登錄驗(yàn)證碼功能
- Django驗(yàn)證碼的生成與使用示例
- python django 實(shí)現(xiàn)驗(yàn)證碼的功能實(shí)例代碼
- Django 生成登陸驗(yàn)證碼代碼分享
- django 發(fā)送手機(jī)驗(yàn)證碼的示例代碼
- Django 登陸驗(yàn)證碼和中間件的實(shí)現(xiàn)
- Django實(shí)現(xiàn)登錄隨機(jī)驗(yàn)證碼的示例代碼
- Django框架驗(yàn)證碼用法實(shí)例分析
- Django框架實(shí)現(xiàn)的普通登錄案例【使用POST方法】
- 詳解Django框架中用戶的登錄和退出的實(shí)現(xiàn)
- Django框架登錄加上驗(yàn)證碼校驗(yàn)實(shí)現(xiàn)驗(yàn)證功能示例
相關(guān)文章
Python操作mongodb數(shù)據(jù)庫(kù)的方法詳解
這篇文章主要介紹了Python操作mongodb數(shù)據(jù)庫(kù)的方法,結(jié)合實(shí)例形式詳細(xì)分析了Python下載、安裝pymongo及操作MongoDB數(shù)據(jù)庫(kù)相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-12-12
在python中利用numpy求解多項(xiàng)式以及多項(xiàng)式擬合的方法
今天小編就為大家分享一篇在python中利用numpy求解多項(xiàng)式以及多項(xiàng)式擬合的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-07-07
python語(yǔ)言元素知識(shí)點(diǎn)詳解
在本篇文章中小編給大家分享了關(guān)于python語(yǔ)言元素的相關(guān)知識(shí)點(diǎn)以及實(shí)例代碼,需要的朋友們跟著學(xué)習(xí)下。2019-05-05
Mac上Python使用ffmpeg完美解決方案(避坑必看!)
ffmpeg是一個(gè)強(qiáng)大的開源命令行多媒體處理工具,下面這篇文章主要給大家介紹了關(guān)于Mac上Python使用ffmpeg完美解決方案的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02
Python實(shí)現(xiàn)批量下載SMAP數(shù)據(jù)
在科學(xué)研究和數(shù)據(jù)分析中,獲取大規(guī)模的遙感數(shù)據(jù)是一個(gè)常見的任務(wù),本文將詳細(xì)為大家介紹如何利用Python實(shí)現(xiàn)SMAP數(shù)據(jù)的批量下載,需要的可以參考下2023-12-12

