真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何制作驗證碼

推導(dǎo)步驟1:在img標(biāo)簽的src屬性里放上驗證碼的請求路徑

補(bǔ)充1.img的src屬性:
	1.圖片路徑
	2.url
	3.圖片的二進(jìn)制數(shù)據(jù)
補(bǔ)充2:字體樣式
	我們計算機(jī)上之所以可以輸出各種各樣的字體樣式,其內(nèi)部其實對應(yīng)的是一個個以.ttf結(jié)尾的文件
	
由于img的src屬性里可以放圖片的二進(jìn)制數(shù)據(jù),因此我們可以在src里放上圖片的請求路徑,返回的是一個圖片的二進(jìn)制數(shù)據(jù)



# 該視圖函數(shù)返回的是圖片的二進(jìn)制數(shù)據(jù),圖片是本地已有的圖片路徑
def get_code(request):
    with open ('static/img/default.png','rb') as f:
        data = f.read()
    return HttpResponse(data)

字體樣式網(wǎng)站

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比新華網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式新華網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋新華地區(qū)。費(fèi)用合理售后完善,十多年實體公司更值得信賴。

推導(dǎo)步驟2:利用pillow模塊動態(tài)產(chǎn)生圖片

"""
圖片相關(guān)的模塊:
        pip3 install pillow
導(dǎo)入:from PIL import Image,ImageDraw,ImageFont
Image:生成圖片
ImageDraw:能夠在圖片上亂涂亂畫
ImageFont:控制字體樣式
"""
from PIL import Image,ImageDraw,ImageFont
import random

def get_random():
    return random.randint(0,255),random.randint(0,255),random.randint(0,255),

def get_code(request):
    1.先產(chǎn)生一個圖片,new方法的第一個參數(shù)是固定模式RGB格式,第二個是圖片大小(寬,高),第三個是圖片顏色(可以放rgb模式的顏色)
    # image_obj = Image.new('RGB',(350,35),'green') # 固定顏色
    # image_obj = Image.new('RGB',(350,35),(23,43,53)) # 變形1
    image_obj = Image.new('RGB', (350, 35), get_random()) # 變形2
    2.將產(chǎn)生的圖片存起來,打開一個文件,該圖片有一個save方法可以存儲圖片,第一個參數(shù)是文件句柄,第二個是存儲圖片格式
    with open('xxx.png','wb') as f:
        image_obj.save(f,'png')

    3.再將圖片以二進(jìn)制形式讀出來,返回給img標(biāo)簽的src屬性
    with open('xxx.png','rb') as f:
        data = f.read()
    return HttpResponse(data)

上述方法:會進(jìn)行頻繁的文件存儲IO操作,效率比較低下,步驟4利用內(nèi)存管理器模塊優(yōu)化!

推導(dǎo)步驟4:利用內(nèi)存管理器模塊優(yōu)化

"""
導(dǎo)入內(nèi)存管理器模塊:from io import BytesIO,StringIO
BytesIO:功能臨時幫您存儲數(shù)據(jù),返回的數(shù)據(jù)是二進(jìn)制
StringIO:功能臨時幫您存儲數(shù)據(jù),返回的數(shù)據(jù)是字符串
"""
def get_code(request):

    # 1.同樣先生成一個圖片對象
    image_obj = Image.new('RGB', (350, 35), get_random())
    # 2.這里再生成一個內(nèi)存管理器對象,就可以看成是f文件句柄
    io_obj = BytesIO()
    # 3.將圖片保存到文件管理器對象里
    image_obj.save(io_obj,'png')
    # 4.把圖片從文件管理器對象里取出來,用getvalue()方法
    return HttpResponse(io_obj.getvalue())

最終步驟:寫圖片驗證碼

def get_code(request):
    # 1.同樣先生成一個圖片對象
    image_obj = Image.new('RGB', (350, 35), get_random())
    # 2.在圖片上生成一個畫筆對象
    img_draw = ImageDraw.Draw(image_obj)
    # 3.設(shè)置字體樣式,truetype()第一個參數(shù)是字體樣式路徑,第二個是字體大小
    img_font = ImageFont.truetype('static/font/222.ttf',30)

    # 4.隨機(jī)生成驗證碼,五位,大小寫字母、數(shù)字
    code = ''
    for i in range(5):
        random_upper = chr(random.randint(65,90)) # 65-90的數(shù)字使用chr()函數(shù)對應(yīng)轉(zhuǎn)成大寫字母
        random_lower = chr(random.randint(97,122)) # 97-122的數(shù)字使用chr()函數(shù)對應(yīng)轉(zhuǎn)成小寫字母
        random_int = str(random.randint(0,9))

        # 從上面三種隨機(jī)選擇一種
        tmp = random.choice([random_int,random_lower,random_upper])
        # 將產(chǎn)生的隨機(jī)字符串寫到圖片上
        """
        text()方法的第一個參數(shù),字符串在圖片上的坐標(biāo),第二個是字符串,
        第三個字符串的顏色,第四個字體樣式和大小
        """
        img_draw.text((i*60,0),tmp,get_random(),img_font)
        code += tmp
    print(code)
    # 5.將生成的隨機(jī)驗證碼保存起來,因為在登錄的視圖函數(shù)需要用到,進(jìn)行比對
    request.session['code'] = code
    # 6.再生成一個內(nèi)存管理器對象,就可以看成是f文件句柄
    io_obj = BytesIO()
    # 7.將圖片保存到文件管理器對象里
    image_obj.save(io_obj,'png')
    # 8.把圖片從文件管理器對象里取出來,用getvalue()方法
    return HttpResponse(io_obj.getvalue())

補(bǔ)充

如何讓用戶一點(diǎn)驗證碼圖片就刷新驗證碼






分享標(biāo)題:如何制作驗證碼
路徑分享:http://weahome.cn/article/dsogsjc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部