Django 验证码4.4
生活随笔
收集整理的這篇文章主要介紹了
Django 验证码4.4
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
驗證碼
- 在用戶注冊、登錄頁面,為了防止暴力請求,可以加入驗證碼功能,如果驗證碼錯誤,則不需要繼續處理,可以減輕一些服務器的壓力
- 使用驗證碼也是一種有效的防止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 HttpResponse
def verifycode(request):#引入繪圖模塊from PIL import Image, ImageDraw, ImageFont#引入隨機函數模塊import random#定義變量,用于畫面的背景色、寬、高bgcolor = (random.randrange(20, 100), random.randrange(20, 100), 255)width = 100height = 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 cStringIObuf = cStringIO.StringIO()#將圖片保存在內存中,文件類型為pngim.save(buf, 'png')#將內存中的圖片數據返回給客戶端,MIME類型為圖片pngreturn 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>
- 為了能夠實現提交功能,需要增加form和input標簽
<form method='post' action='/verifycodeValid/'><input type="text" name="vc"><img id='verifycode' src="/verifycode/?1" alt="CheckCode"/>
<span id='verifycodeChange'>看不清,換一個</span>
<br>
<input type="submit" value="提交">
</form>
驗證
- 接收請求的信息,與session中的內容對比
from django.http import HttpResponsedef verifycodeValid(request):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 验证码4.4的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ps命令使用详解
- 下一篇: Django高级管理静态文件和中间件5.