基于Python+Flask實(shí)現(xiàn)一個(gè)簡易網(wǎng)頁驗(yàn)證碼登錄系統(tǒng)案例
1. 開始之前
首先,確保你已經(jīng)安裝了以下所需的庫:
pip install flask Pillow
- Flask: 一個(gè)輕量級(jí)的Web服務(wù)器和框架。
- Pillow: 處理圖像操作,用于生成驗(yàn)證碼圖像。
2. 生成驗(yàn)證碼圖像
我們使用Pillow庫來生成驗(yàn)證碼圖像。除了顯示數(shù)字和字母,為了增加安全性,我們還會(huì)在圖像上添加一些干擾線條和噪點(diǎn)。
from PIL import Image, ImageDraw, ImageFont import random import string def generate_captcha_image(): # 定義圖片大小及背景顏色 image = Image.new('RGB', (120, 30), color=(73, 109, 137)) # 使用系統(tǒng)自帶字體,或指定字體文件路徑 font_path = "./arial.ttf" fnt = ImageFont.truetype(font_path, 15) d = ImageDraw.Draw(image) # 生成5位數(shù)的驗(yàn)證碼文本 captcha_text = ''.join(random.choices(string.ascii_uppercase + string.digits, k=5)) d.text((10, 10), captcha_text, font=fnt, fill=(255, 255, 0)) # 添加干擾線條和噪點(diǎn) for _ in range(random.randint(3, 5)): start = (random.randint(0, image.width), random.randint(0, image.height)) end = (random.randint(0, image.width), random.randint(0, image.height)) d.line([start, end], fill=(random.randint(50, 200), random.randint(50, 200), random.randint(50, 200))) for _ in range(100): xy = (random.randrange(0, image.width), random.randrange(0, image.height)) d.point(xy, fill=(random.randint(50, 200), random.randint(50, 200), random.randint(50, 200))) return image, captcha_text
3. 使用Flask建立Web應(yīng)用
現(xiàn)在,我們使用Flask來創(chuàng)建一個(gè)Web應(yīng)用,并展示登錄頁面與驗(yàn)證碼圖像。
from flask import Flask, render_template, jsonify, request, session import io app = Flask(__name__) app.config['SECRET_KEY'] = 'your_secret_key_here' @app.route('/') def index(): # 渲染登錄頁面 return render_template('login.html') @app.route('/captcha') def captcha(): # 使用上述函數(shù)生成驗(yàn)證碼圖片 image, captcha_text = generate_captcha_image() # 將驗(yàn)證碼文本存儲(chǔ)到session,以便之后進(jìn)行驗(yàn)證 session['captcha'] = captcha_text buf = io.BytesIO() image.save(buf, format='PNG') buf.seek(0) return buf.getvalue(), 200, { 'Content-Type': 'image/png', 'Content-Length': str(len(buf.getvalue())) }
4. 處理登錄請(qǐng)求
登錄時(shí),我們需要驗(yàn)證用戶輸入的驗(yàn)證碼是否與我們生成的匹配。
@app.route('/login', methods=['POST']) def login(): # 檢查用戶輸入的驗(yàn)證碼是否與session中的一致 if request.json.get('captcha', '').upper() == session.get('captcha', '').upper(): return jsonify({'status': 'success', 'message': '登錄成功'}) else: return jsonify({'status': 'error', 'message': '驗(yàn)證碼錯(cuò)誤'}), 400
5. 總結(jié)
通過上面的代碼,我們創(chuàng)建了一個(gè)簡單的網(wǎng)站驗(yàn)證碼登錄系統(tǒng)。用戶需要輸入與圖片上顯示的驗(yàn)證碼匹配的文本來驗(yàn)證自己是人類。這不僅提高了安全性,而且能夠有效地阻止惡意機(jī)器人。 盡管此示例只是基礎(chǔ)版本,但您可以在此基礎(chǔ)上添加更多的安全性措施,例如使用更復(fù)雜的驗(yàn)證碼、添加限制登錄嘗試次數(shù)的功能或使用其他驗(yàn)證方法。 希望本文能幫助您了解如何使用Python和Flask來創(chuàng)建驗(yàn)證碼登錄系統(tǒng)。在實(shí)際開發(fā)中,為了提供更好的用戶體驗(yàn)和安全性,建議進(jìn)一步完善和增強(qiáng)此系統(tǒng)。
以上就是基于Python+Flask實(shí)現(xiàn)一個(gè)簡易網(wǎng)頁驗(yàn)證碼登錄系統(tǒng)案例的詳細(xì)內(nèi)容,更多關(guān)于Python+Flask網(wǎng)頁驗(yàn)證碼登錄的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python + Flask 實(shí)現(xiàn)簡單的驗(yàn)證碼系統(tǒng)
- python web框架Flask實(shí)現(xiàn)圖形驗(yàn)證碼及驗(yàn)證碼的動(dòng)態(tài)刷新實(shí)例
- flask實(shí)現(xiàn)驗(yàn)證碼并驗(yàn)證功能
- Flask項(xiàng)目中實(shí)現(xiàn)短信驗(yàn)證碼和郵箱驗(yàn)證碼功能
- Python Flask實(shí)現(xiàn)圖片驗(yàn)證碼與郵箱驗(yàn)證碼流程詳細(xì)講解
- Python的Flask框架開發(fā)驗(yàn)證碼登錄的實(shí)現(xiàn)
- Flask 驗(yàn)證碼自動(dòng)生成的實(shí)現(xiàn)示例
相關(guān)文章
Python分析彩票記錄并預(yù)測(cè)中獎(jiǎng)號(hào)碼過程詳解
這篇文章主要介紹了Python分析彩票記錄并預(yù)測(cè)中獎(jiǎng)號(hào)碼過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07基于python實(shí)現(xiàn)微信收紅包自動(dòng)化測(cè)試腳本(測(cè)試用例)
這篇文章主要介紹了基于python實(shí)現(xiàn)微信收紅包自動(dòng)化測(cè)試腳本,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-07-07python中的信號(hào)通信 blinker的使用小結(jié)
信號(hào)是一種通知或者說通信的方式,信號(hào)分為發(fā)送方和接收方,信號(hào)的特點(diǎn)就是發(fā)送端通知訂閱者發(fā)生了什么,今天通過本文給大家介紹python中的信號(hào)通信 blinker的相關(guān)知識(shí),感興趣的朋友一起看看吧2021-10-10python學(xué)習(xí)之matplotlib繪制散點(diǎn)圖實(shí)例
這篇文章主要介紹了python學(xué)習(xí)之matplotlib繪制散點(diǎn)圖實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12Pandas借助Numpy實(shí)現(xiàn)優(yōu)化的條件檢索代碼
Numpy其實(shí)是最早的處理數(shù)據(jù)的Python庫,它的核心ndarray對(duì)象,是一個(gè)高效的n維數(shù)組結(jié)構(gòu),本文主要介紹了Pandas如何借助Numpy優(yōu)化條件檢索,感興趣的可以了解下2024-03-03通過Django Admin+HttpRunner1.5.6實(shí)現(xiàn)簡易接口測(cè)試平臺(tái)
這篇文章主要介紹了通過Django Admin+HttpRunner1.5.6實(shí)現(xiàn)簡易接口測(cè)試平臺(tái),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11Python Pygame實(shí)戰(zhàn)之飛機(jī)大戰(zhàn)的實(shí)現(xiàn)
飛機(jī)大戰(zhàn)想必是很多人童年時(shí)期的經(jīng)典游戲,這篇文章主要給大家介紹了關(guān)于如何利用python中的Pygame模塊寫一個(gè)簡單的飛機(jī)大戰(zhàn)小游戲的相關(guān)資料,需要的朋友可以參考下2022-03-03Python基于unittest實(shí)現(xiàn)測(cè)試用例執(zhí)行
這篇文章主要介紹了Python基于unittest實(shí)現(xiàn)測(cè)試用例執(zhí)行,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11