python-Web-django-图形验证
python-Web-django-图形验证
import randomdef get_random_color():
return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
def get_valid_code_img(request):
# 方式1:
# with open("lufei.jpg","rb") as f:
# data=f.read()
# 方式2: # pip install pillow
# from PIL import Image
# img=Image.new("RGB",(270,40),color=get_random_color())
#
# with open("validCode.png","wb") as f:
# img.save(f,"png")
#
# with open("validCode.png","rb") as f:
# data=f.read()
# 方式3:
# from PIL import Image
# from io import BytesIO
#
# img=Image.new("RGB",(270,40),color=get_random_color())
# f=BytesIO()
# img.save(f,"png")
# data=f.getvalue()
# 方式4:
from PIL import Image, ImageDraw, ImageFont
from io import BytesIO
import random
img = Image.new("RGB", (270, 40), color=get_random_color())#生成一个宽270*高40的画布,背景颜色随机
draw = ImageDraw.Draw(img)#进行绘画
kumo_font = ImageFont.truetype("../static/font/ahronbd.ttf", size=42)#字体 字体大小
valid_code_str = ""
for i in range(4):
random_num = str(random.randint(0, 9))#0-9的随机数 9
random_low_alpha = chr(random.randint(97, 122))#a 到 z 随机的一个小写字母 b
random_upper_alpha = chr(random.randint(65, 90))#A 到 Z 随机的一个大写字母 Q
random_char = random.choice([random_num, random_low_alpha, random_upper_alpha]) #2
draw.text((i * 50 + 20, 5), random_char, get_random_color(), font=kumo_font) #往长方形上写字
# 保存验证码字符串
valid_code_str += random_char #85656
#
width=270
height=40
# for 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(10):
# draw.point([random.randint(0, width), random.randint(0, height)], fill=get_random_color())#画小点
x = random.randint(0, width)
y = random.randint(0, height)
draw.arc((x, y, x + 4, y + 4), 0, 90, fill=get_random_color()) #小线段
request.session["valid_code_str"] = valid_code_str.upper()
\'\'\'
1 sdajsdq33asdasd
2 COOKIE {"sessionid":sdajsdq33asdasd}
3 django-session
session-key session-data
sdajsdq33asdasd {"valid_code_str":"12345"}
\'\'\'
f = BytesIO()
img.save(f, "png") #png
data = f.getvalue()
return data
views:
from django.shortcuts import render,HttpResponse,redirectimport json
from app01.models import *
def login(request):
\'\'\'\'\'\'
res = {\'s\': None, \'info\': None}
if request.method == \'POST\':
print(request.POST)
username = request.POST.get(\'LoginName\')
pwd = request.POST.get(\'Password\')
code = request.POST.get(\'code\')
code = code.upper()
if code != request.session[\'valid_code_str\']:
\'\'\'验证码输入错误\'\'\'
res[\'s\'] = 0
res[\'info\'] = \'验证码输入错误\'
print(res)
return HttpResponse(json.dumps(res))
manage_obj = Manage.objects.filter(name=username, pwd=pwd).first()
print(manage_obj)
if not manage_obj:
res[\'s\'] = 0
res[\'info\'] = \'登陆失败\'
print(2)
print(res)
return HttpResponse(json.dumps(res))
request.session[\'manage_name\'] = manage_obj.name
request.session[\'manage_id\'] = manage_obj.id
print(3)
res[\'s\'] = 1
res[\'info\'] = \'登陆成功\'
print(2)
print(res)
return HttpResponse(json.dumps(res))
return render(request,\'index/login.html\',locals())
def login2(request):
\'\'\'图像码\'\'\'
from app01.utils import validCode
vc = validCode.get_valid_code_img(request)
print(request.session[\'valid_code_str\'])
return HttpResponse(vc, \'image/png\')
from back.views.ddff import ddff
@ddff
def out(request):
\'\'\'退出\'\'\'
a = \'User, you have successfully quit, welcome to use next time\'
del request.session[\'manage_name\']
del request.session[\'manage_id\']
return render(request, \'index/login.html\', locals())
html:
<form action="" method="post">{% csrf_token %}
<ul>
<li><input name="LoginName" type="text" class="loginuser" placeholder="admin"/></li>
<li><input name="Password" type="text" class="loginpwd" placeholder="密码"/></li>
<li class="yzm" style="width:230px;height:60px ;">
<span><input name="code" type="text" placeholder="验证码"/><img width="115" height="46" id="valid_code_img" src="/back/login/login2/" alt="" onclick="this.src=\'/back/login/login2/?\'+Math.random()" style="position: absolute;"></span>
</li>
<li>
<input id="submitBtn" type="button" class="loginbtn" value="登录"/>
<label><input name="" type="checkbox" value="" checked="checked" />记住密码</label>
{# <label><a href="#">忘记密码?</a></label>#}
</li>
</ul>
</form>
<script>
$(document).ready(function () {
$("#submitBtn").click( function () {
// 点击事件
$.post("/back/login/login/",$(\'form\').serialize() , function (data) {
//LoginName,Password,code
if (data[\'s\'] == 1) {
layer.msg("登录成功!");
// 跳转主页面
location.href="{% url \'back:index/index/\' %}";
} else {
//登陆失败
layer.msg(data[\'info\']);
}
return false;
}, "json");
})
})
</script>
以上是 python-Web-django-图形验证 的全部内容, 来源链接: utcz.com/z/386778.html