python登录验证码(基于django框架)
生活随笔
收集整理的這篇文章主要介紹了
python登录验证码(基于django框架)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1. 前端頁面(引入jquery與bootstrap.css)
<div class="container"><div class="row"><div class="col-md-8 col-md-offset-2"><form action="" method="post">{% csrf_token %}<div class="form-group"><lable for="">用戶名</lable><input type="text" class="form-control" id="user"></div><div class="form-group"><lable for="">密碼</lable><input type="password" class="form-control" id="password"></div><div class="form-group"><lable for="">驗(yàn)證碼</lable><div class="row"><div class="col-md-6"><input type="text" class="form-control" id="validcode"></div><div class="col-md-6"><img src="/valid_Image/" alt="" class="valid-img"></div><div class="col-md-3"><input type="button" id="refresh"></div></div></div><input type="button" class="btn btn-primary" value="登錄"><span class="error-info"></span></form></div></div> </div> <script>$(".btn-primary").click(function () {$.ajax({url:'',type:'post',data:{user:$('#user').val(),password:$('#password').val(),validcode:$('#validcode').val(),csrfmiddlewaretoken:$("[name='csrfmiddlewaretoken']").val(),},success:function (response) {//判斷是否通過驗(yàn)證if (response.user){$('.error-info').html(response.user).css('color','black')}else{$('.error-info').html(response.error).css('color','red')}}})});//點(diǎn)擊驗(yàn)證碼圖片異步刷新$(".valid-img").click(function () {{#src=$('.valid-img').prop('src')+"?";#}{#$('.valid-img').prop('src',src);#}this.src+='?';}) </script>2. 后臺(tái)python
from django.shortcuts import render,HttpResponse from django.contrib import auth#登錄視圖函數(shù) def login(request):#判斷請(qǐng)求方式if request.is_ajax():#獲得前端用戶登陸數(shù)據(jù)user=request.POST.get('user')password=request.POST.get('password')validcode=request.POST.get('validcode')#創(chuàng)建響應(yīng)數(shù)據(jù)字典response = {"user": None, "error": ""}#判斷驗(yàn)證碼是否一致if validcode.upper()==request.session.get('valid_text').upper():#驗(yàn)證碼一直后判斷用戶名與密碼是否正確,如正確返回用戶對(duì)象user_obj=auth.authenticate(usename=user,password=password)if user_obj:response['user']=userelse:response['error']="用戶名或者密碼錯(cuò)誤"#ajax請(qǐng)求返回一個(gè)jsonelse:response['user']='驗(yàn)證碼錯(cuò)誤'return JsonResponse(response)if request.request.method=='GET':return render(request,'login.html')#生成驗(yàn)證碼圖片 def valid_Image(request):from PIL import Image,ImageDraw,ImageFontfrom io import BytesIOimport random#獲得隨機(jī)顏色def get_random_color():return(random.randint(0,255),random.randint(0,255),random.randint(0,255))#生成背景圖片img=Image.new('RGB',(130,40),get_random_color())#使用畫筆draw=ImageDraw.Draw(img)#設(shè)置驗(yàn)證碼字體(字體文件與路徑需自己設(shè)置)font=ImageFont.truetype('static/Hollywood Hills Italic.ttf',20)#創(chuàng)建存儲(chǔ)驗(yàn)證碼字符串的變量valid_text=''#生成驗(yàn)證碼(包括數(shù)字與大小寫字母)for i in range(5):random_Num=str(random.randint(0,9))random_Lowchar=chr(random.randint(97,122))random_Upchar = chr(random.randint(65, 90))random_text=random.choice([random_Num,random_Lowchar,random_Upchar])draw.text((i*20+10,5),random_text,get_random_color(),font)valid_text+=random_text#生成驗(yàn)證碼圖片內(nèi)的干擾線與噪點(diǎn)width=130height=40for i in range(10):x1=random.randint(0,width)y1=random.randint(0,height)x2 = random.randint(0, width)y2 = random.randint(0, height)draw.line((x1,y1,x2,y2),fill=get_random_color())for i in range(120):x1=random.randint(0,width)y1=random.randint(0,height)draw.point((x1,y1),fill=get_random_color())#設(shè)置sessionrequest.session['valid_text']=valid_text#將生成的圖片存在內(nèi)存中f=BytesIO()img.save(f,'jpeg')data=f.getvalue()f.close()#返回驗(yàn)證碼圖片return HttpResponse(data)?
轉(zhuǎn)載于:https://www.cnblogs.com/wangdamao/p/11564355.html
總結(jié)
以上是生活随笔為你收集整理的python登录验证码(基于django框架)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js - void
- 下一篇: python用户注册(基于django)