django 添加驗(yàn)證碼

目的:jumpserver 3.0登錄頁面加入驗(yàn)證碼潮模。

網(wǎng)上有第三方包Django Simple Captcha可以實(shí)現(xiàn)這個(gè)圖片驗(yàn)證香椎,用起來相對比較方便的变擒。但是我實(shí)踐時(shí)候是另一種方法颊艳,就當(dāng)過程學(xué)習(xí)了。


1枫疆、代碼生成驗(yàn)證碼圖片(結(jié)尾附上)爵川,驗(yàn)證碼的值存入django cache

調(diào)用的庫 from django.core.cache import cache

2、jumpserver的視圖文件view.py的Login函數(shù)增加驗(yàn)證碼方法

# 調(diào)用verify_code.py生成驗(yàn)證碼值和圖片

? ? today_str = datetime.date.today().strftime("%Y%m%d")

? ? verify_code_img_path = "%s/%s" % (settings.VERIFICATION_CODE_IMGS_DIR,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? today_str)

? ? if not os.path.isdir(verify_code_img_path):

? ? ? ? os.makedirs(verify_code_img_path)

? ? print("session:", request.session.session_key)

? ? random_filename = "".join(random.sample(string.ascii_lowercase,4))

? ? random_code = verify_code.gene_code(verify_code_img_path,random_filename)

? ? cache.set(random_filename, random_code,30)

#賬號(hào)驗(yàn)證息楔,先驗(yàn)證驗(yàn)證碼

username = request.POST.get('username')

? ? ? ? password = request.POST.get('password')

? ? ? ? _verify_code = request.POST.get('verify_code')

? ? ? ? _verify_code_key = request.POST.get('verify_code_key')

? ? ? ? if cache.get(_verify_code_key) == _verify_code:

? ? ? ? ? ? if username and password:

? ? ? ? ? ? ? ? user = authenticate(username=username, password=password)

3寝贡、前端頁面添加驗(yàn)證碼

前端代碼

附網(wǎng)上一份生成驗(yàn)證碼的代碼:

#_*_coding:utf-8_*_

from PIL import Image,ImageDraw,ImageFont,ImageFilter

import random

import math, string

#字體的位置,不同版本的系統(tǒng)會(huì)有不同

font_path = '/Library/Fonts/Arial.ttf'

#font_path = '/Library/Fonts/Hanzipen.ttc'

#生成幾位數(shù)的驗(yàn)證碼

number = 4

#生成驗(yàn)證碼圖片的高度和寬度

size = (100,30)

#背景顏色钞螟,默認(rèn)為白色

bgcolor = (255,255,255)

#字體顏色,默認(rèn)為藍(lán)色

fontcolor = (0,0,255)

#干擾線顏色谎碍。默認(rèn)為紅色

linecolor = (255,0,0)

#是否要加入干擾線

draw_line = True

#加入干擾線條數(shù)的上下限

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是生成驗(yàn)證碼的位數(shù)

#用來繪制干擾線

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) #創(chuàng)建圖片

? ? font = ImageFont.truetype(font_path,25) #驗(yàn)證碼的字體和字體大小

? ? #font = ImageFont.truetype(25) #驗(yàn)證碼的字體和字體大小

? ? draw = ImageDraw.Draw(image) #創(chuàng)建畫筆

? ? #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)? # 創(chuàng)建扭曲

? ? image = image.filter(ImageFilter.EDGE_ENHANCE_MORE)? # 濾鏡鳞滨,邊界加強(qiáng)

? ? image.save('%s/%s.png' %(save_path,filename))? # 保存驗(yàn)證碼圖片

? ? print("savepath:",save_path)

? ? return text

if __name__ == "__main__":

? ? gene_code('/tmp','test') #會(huì)把生成的圖片存成/tmp/test.png

隨機(jī)驗(yàn)證碼代碼

需要安裝python?Pillow-1.7.8庫,先安裝依賴

#?yum install -y libjpeg-devel freetype-devel libpng-devel

不然直接安裝python包蟆淀,生成圖片會(huì)報(bào)錯(cuò)


參考網(wǎng)址:https://www.cnblogs.com/alex3714/articles/6662365.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拯啦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子熔任,更是在濱河造成了極大的恐慌褒链,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疑苔,死亡現(xiàn)場離奇詭異甫匹,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門兵迅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抢韭,“玉大人,你說我怎么就攤上這事恍箭】坦В” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵扯夭,是天一觀的道長鳍贾。 經(jīng)常有香客問我,道長交洗,這世上最難降的妖魔是什么骑科? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮藕筋,結(jié)果婚禮上纵散,老公的妹妹穿的比我還像新娘。我一直安慰自己隐圾,他們只是感情好伍掀,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著暇藏,像睡著了一般蜜笤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盐碱,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天把兔,我揣著相機(jī)與錄音,去河邊找鬼瓮顽。 笑死县好,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的暖混。 我是一名探鬼主播缕贡,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拣播!你這毒婦竟也來了晾咪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤贮配,失蹤者是張志新(化名)和其女友劉穎谍倦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泪勒,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡昼蛀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年宴猾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片曹洽。...
    茶點(diǎn)故事閱讀 39,932評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鳍置,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出送淆,到底是詐尸還是另有隱情税产,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布偷崩,位于F島的核電站辟拷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏阐斜。R本人自食惡果不足惜衫冻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谒出。 院中可真熱鬧隅俘,春花似錦、人聲如沸笤喳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杀狡。三九已至蒙畴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間呜象,已是汗流浹背膳凝。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恭陡,地道東北人蹬音。 一個(gè)月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像休玩,于是被迫代替她去往敵國和親著淆。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評論 2 354