日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Django 验证码4.4

發布時間:2023/11/28 生活经验 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。