1. 程式人生 > >Django中實現驗證碼功能

Django中實現驗證碼功能

  • 安裝Pillow
pip install Pillow==3.4.1
  • windows下如果安裝報錯:

    點選此處

    下載對應的版本到本地,下載到那裡,就去那個目錄下:

    pip install Pillow-3.4.2-cp36-cp36m-win32.whl
    
  • 在建立的應用/views.py檔案中,建立一個檢視。

from PIL import Image, ImageDraw, ImageFont
from django.utils.six import BytesIO


def verification_code(request):
    """驗證碼"""

    # 引入隨機函式模組
import random # 定義變數,用於畫面的背景色、寬、高 bgcolor = (random.randrange(20, 100), random.randrange( 20, 100), 255) width = 100 height = 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))] # 構造字型物件,ubuntu的字型路徑為“/usr/share/fonts/truetype/freefont” # font = ImageFont.truetype('FreeMono.ttf', 23) # windows下找到win+r輸入fonts,選擇一個字型,注意小寫 font = ImageFont.truetype("arial.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 # 記憶體檔案操作 buf = BytesIO() # 將圖片儲存在記憶體中,檔案型別為png im.save(buf, 'png') # 將記憶體中的圖片資料返回給客戶端,MIME型別為圖片png return HttpResponse(buf.getvalue(), 'image/png')