4、自動化平臺搭建-Django-如何作驗證碼

前提:安裝包   pip install pillow==3.4.1html

一、打開booktest/views.py,建立視圖verify_code。python

from PIL import Image, ImageDraw, ImageFont
from django.utils.six import BytesIO
...
def verify_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)
    #構造字體顏色
    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')

二、打開booktest/urls.py文件,配置url。django

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

三、調用驗證碼ubuntu

  1)在booktest/views.py文件中,建立視圖verify_show。瀏覽器

def verify_show(request):
    return render(request,'booktest/verify_show.html')

  2)打開booktest/urls.py文件,配置url。服務器

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

  3)在templates/booktest/目錄下建立verify_show.html。session

<html>
<head>
    <title>驗證碼</title>
</head>
<body>
<form method="post" action="/verify_yz/">
    {%csrf_token%}
    <input type="text" name="yzm">
    <img id="yzm" src="/verify_code/"/>
    <span id="change">看不清,換一個</span>
    <br>
    <input type="submit" value="提交">
</form>
</body>
</html>

  運行服務器,在瀏覽器輸入 http://127.0.0.1:8000/verify_show/,效果以下,刷新頁面驗證碼還會變dom

 

 

 四、提交驗證函數

  1)在booktest/views.py文件中,建立視圖verify_yz。post

def verify_yz(request):
    yzm=request.POST.get('yzm')
    verifycode=request.session['verifycode']
    response=HttpResponse('驗證碼錯誤')
    if yzm==verifycode:
        response=HttpResponse('驗證碼正確')
    return response

  2)打開booktest/urls.py文件,配置url。

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

  回到瀏覽器,刷新,填寫驗證碼提交,會看到驗證效果

相關文章
相關標籤/搜索