登錄驗證碼是每個網站登錄時的基本標配,網上也有很多相應的文章, 但是從生成驗證碼到 應用到自己的網站上的全步驟,并沒有看到很多, 為了節約大家的時間,我把整體步驟寫下來, 即拿即用哈
1. 生成隨機驗證碼
#_*_coding:utf-8_*_from PIL import Image,ImageDraw,ImageFont,ImageFilterimport randomimport math, string#字體的位置,不同版本的系統會有不同font_path = '/Library/Fonts/Arial.ttf'#font_path = '/Library/Fonts/Hanzipen.ttc'#生成幾位數的驗證碼number = 4#生成驗證碼圖片的高度和寬度size = (100,30)#背景顏色,默認為白色bgcolor = (255,255,255)#字體顏色,默認為藍色fontcolor = (0,0,255)#干擾線顏色。默認為紅色linecolor = (255,0,0)#是否要加入干擾線draw_line = True#加入干擾線條數的上下限line_number = (1,5)def gen_text(): source = list(string.ascii_letters) for index in range(0,10): source.append(str(index)) return ''.join(random.sample(source,number))#number是生成驗證碼的位數#用來繪制干擾線def gene_line(draw,width,height): begin = (random.randint(0, width), random.randint(0, height)) end = (random.randint(0, width), random.randint(0, height)) draw.line([begin, end], fill = linecolor)def gene_code(save_path,filename): width,height = size #寬和高 image = Image.new('RGBA',(width,height),bgcolor) #創建圖片 font = ImageFont.truetype(font_path,25) #驗證碼的字體和字體大小 #font = ImageFont.truetype(25) #驗證碼的字體和字體大小 draw = ImageDraw.Draw(image) #創建畫筆 #text = "我是中國人" #生成字符串 text = gen_text() #生成字符串 print(text) font_width, font_height = font.getsize(text) draw.text(((width - font_width) / number, (height - font_height) / number),text,/ font= font,fill=fontcolor) #填充字符串 if draw_line: gene_line(draw, width, height) gene_line(draw, width, height) gene_line(draw, width, height) gene_line(draw, width, height) image = image.transform((width + 20, height +10), Image.AFFINE, (1, -0.3, 0, -0.1, 1, 0), Image.BILINEAR) # 創建扭曲 image = image.filter(ImageFilter.EDGE_ENHANCE_MORE) # 濾鏡,邊界加強 image.save('%s/%s.png' %(save_path,filename)) # 保存驗證碼圖片 print("savepath:",save_path) return textif __name__ == "__main__": gene_code('/tmp','test') #會把生成的圖片存成/tmp/test.png
2. 如何應用到你的django項目中
整個驗證碼的流程如下
1.用戶訪問登錄頁面,你的后臺程序在給用戶返回登錄頁面時,同時生成了驗證碼圖片
2.用戶輸入賬戶信息和驗證碼數字,提交表單
3.后臺判斷用戶輸入的驗證碼和你生成的圖片信息是否一致,如果一致,就代表驗證碼是沒有問題的
問題就卡在第3步,你在第1步生成驗證碼并返回給用戶后,由于一會用戶還需要把這個驗證碼提交過來,你在后臺就需要拿用戶輸入的和你之前生成 的驗證碼進行對比是否相等,
新聞熱點
疑難解答