WEB開發-動態驗證碼

來源:互聯網
上載者:User

標籤:

1.基於Python程式設計語言實現,其他語言大同小異

 

2.登入介面login.html

1 <form action=‘/login/‘>2     <input type=‘text‘ name=‘username‘ />3     <input type=‘password‘ name=‘password‘ />4     <input type=‘text‘ name=‘yanzhengma‘ />5     <img src="/get_yanzhengma/" onclick="ChangeYanzhengma();"></img>6     <input type=‘submit‘ name=‘登入‘ />7 </form>

裡面涉及到2個後端視圖函數login和get_yanzhengma

 

3.後端視圖函數

 1 #-*- coding=utf-8 -*- 2 from PIL import Image,ImageDraw,ImageFont 3  4 def login(request): 5     return render_to_response(‘login.html‘) 6      7      8 def yanzhengma(request): 9     #text為產生的4位隨機字串10     text = rndChar()11     #圖片處理常式,將文本做成圖片12     im = Image.new("RGB", (130, 35), (255, 255, 255))13     dr = ImageDraw.Draw(im)14     font = ImageFont.truetype("arial.tff", 24)15     # arial.tff 這個從windows fonts copy一個過來16     dr.text((10, 5), text, font=font, fill="#000000")17     # im.show()18     #建立一個io對象19     stream = io.BytesIO()20     #將圖片對象im儲存到stream對象裡21     im.save(stream, "png")22     #stream.getvalue()圖片二級制內容,再通過HttpResponse封裝,返回給前端頁面23     return HttpResponse(stream.getvalue())

4.備忘:

(1)img標籤的src屬性,去這個/get_yanzhengma/去取圖片

(2)get_yanzhengma函數執行

(3)通過random模組產生隨機碼,4個字母

(4)通過PIL模組將隨機數字轉換為圖片對象im

(5)建立一個BytesIO對象,記憶體對象,可以儲存二進位的東西

(6)將圖片對象儲存到BytesIO對象中,此處在記憶體裡

#話說為什麼要將圖片對象儲存到BytesIO對象中而不是直接寫到硬碟裡存為圖片檔案呢?因為這樣就保證了在同一個時刻,不同使用者訪問到的驗證碼是不一樣的,而且都是儲存在記憶體中的。

#如果寫成驗證碼圖片檔案到硬碟裡,有可能B頁面顯示的驗證碼是ABCD,但是B使用者還沒提交,A使用者這會訪問,重新整理了驗證碼,把驗證碼變更為DCBA了,B頁面裡看到的還是ABCD,導致一直輸不對驗證碼;無法保證2個使用者的驗證碼圖片衝突問題

#後端驗證碼的隨機值是儲存在session中的,每次使用者GET請求,伺服器上產生隨機驗證碼儲存在session中,並給頁面返回,如果使用者提交的驗證碼和後端session中記錄的一致通過,如果不一致,重新重新整理驗證碼,使用者重新進行提交

#使用者點擊驗證碼圖片重新整理功能,暫未實現;使用者點擊驗證碼圖片,ajax流程-後端伺服器去重建驗證碼,session變更,重新傳遞給前端,驗證碼圖片變更

(7)BytesIO對象的getvalue()方法返回二進位內容

(8)django提供的HttpResponse封裝二進位內容為識別的東西傳遞給前端

(7)前端img標籤正常顯示圖片

WEB開發-動態驗證碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.