Django 驗證碼4.4

      網(wǎng)友投稿 747 2025-04-02

      驗證碼

      在用戶注冊、登錄頁面,為了防止暴力請求,可以加入驗證碼功能,如果驗證碼錯誤,則不需要繼續(xù)處理,可以減輕一些服務器的壓力

      使用驗證碼也是一種有效的防止crsf的方法

      驗證碼效果如下圖:

      驗證碼視圖

      新建viewsUtil.py,定義函數(shù)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

      #引入隨機函數(shù)模塊

      import random

      #定義變量,用于畫面的背景色、寬、高

      bgcolor = (random.randrange(20, 100), random.randrange(

      20, 100), 255)

      width = 100

      height = 25

      #創(chuàng)建畫面對象

      im = Image.new('RGB', (width, height), bgcolor)

      #創(chuàng)建畫筆對象

      draw = ImageDraw.Draw(im)

      #調(diào)用畫筆的point()函數(shù)繪制噪點

      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

      #內(nèi)存文件操作

      import cStringIO

      buf = cStringIO.StringIO()

      #將圖片保存在內(nèi)存中,文件類型為png

      im.save(buf, 'png')

      #將內(nèi)存中的圖片數(shù)據(jù)返回給客戶端,MIME類型為圖片png

      return HttpResponse(buf.getvalue(), 'image/png')

      配置url

      在urls.py中定義請求驗證碼視圖的url

      from . import viewsUtil

      urlpatterns = [

      url(r'^verifycode/$', viewsUtil.verifycode),

      ]

      顯示驗證碼

      在模板中使用img標簽,src指向驗證碼視圖

      CheckCode

      啟動服務器,查看顯示成功

      擴展:點擊“看不清,換一個”時,可以換一個新的驗證碼

      CheckCode

      看不清,換一個

      為了能夠實現(xiàn)提交功能,需要增加form和input標簽

      CheckCode

      看不清,換一個


      驗證

      接收請求的信息,與session中的內(nèi)容對比

      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')

      配置驗證處理的url

      urlpatterns = [

      url(r'^verifycodeValid/$', views.verifycodeValid),

      ]

      第三方

      可以在網(wǎng)上搜索“驗證碼”,找到一些第三方驗證碼提供網(wǎng)站,閱讀文檔,使用到項目中

      Django Python

      版權聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權內(nèi)容。

      版權聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權內(nèi)容。

      上一篇:怎么只更新目錄的頁碼(怎么更新目錄只更新頁碼)
      下一篇:文檔顏色 怎么剛開始就是這個色,沒有改,能變白色(文檔底色是綠色怎么把他變成白色)
      相關文章
      亚洲综合色区在线观看| 亚洲熟女乱综合一区二区| 亚洲youwu永久无码精品 | 久久久久亚洲精品天堂| 久久精品国产精品亚洲蜜月| 亚洲色欲久久久综合网| 亚洲免费日韩无码系列| 亚洲精品视频久久久| va亚洲va日韩不卡在线观看| 亚洲成a人片在线观看日本麻豆 | MM1313亚洲国产精品| 老司机亚洲精品影院在线观看| 婷婷亚洲综合一区二区| 亚洲AV无码成人精品区狼人影院| 亚洲成av人片在线天堂无| 亚洲爆乳少妇无码激情| 国产成人亚洲精品电影| 亚洲精品国产成人影院| 国产亚洲情侣一区二区无| 亚洲人成色77777| 亚洲精品免费在线观看| 亚洲精品韩国美女在线| 亚洲乱码日产精品BD在线观看| wwwxxx亚洲| 亚洲欧美成人av在线观看| 亚洲精品伊人久久久久| 亚洲精品国产高清在线观看| 亚洲成a人片在线观看天堂无码 | 亚洲国产精品无码AAA片| 亚洲国产第一站精品蜜芽| 亚洲va久久久噜噜噜久久狠狠 | 亚洲色成人中文字幕网站| 久久亚洲国产欧洲精品一| 亚洲国产成人一区二区三区| 久久精品九九亚洲精品| 亚洲综合激情九月婷婷| 亚洲一级毛片免费看| 亚洲人成网亚洲欧洲无码| 亚洲精品9999久久久久无码| 全亚洲最新黄色特级网站 | 免费观看亚洲人成网站|