from django.shortcuts import render,HttpResponse
# Create your views here.
from django.contrib import auth
from django.http import JsonResponse
def get_valid_img(request):
# 需要用到的模块
from PIL import Image,ImageDraw,ImageFont
import random
from io import BytesIO
# 随机图片的颜色
def get_random_color():
return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
# 随机字符串
def get_random_char():
random_num=str(random.randint(0,9))
random_upper_alph=chr(random.randint(65,90))
random_lowwer_alph=chr(random.randint(97,122))
# 随机选择一个
random_char=random.choice([random_num,random_lowwer_alph,random_upper_alph])
return random_char
# 创建一张图片
image = Image.new(mode="RGB", size=(260, 40), color=get_random_color())
# 获取一个画笔对象
draw=ImageDraw.Draw(image,mode="RGB")
# 获取一个文字对象,文字文件需要下载并引入这里,并设置字体大小
font=ImageFont.truetype("blog/static/kumo.ttf",32)
valid_code_str=""
# 随机生成6个字符串并写入图片中
for i in range(1,6):
char=get_random_char()
valid_code_str+=char
draw.text([i*40,5],char,get_random_color(),font=font)
width=260
height=40
# for i in range(80):
# draw.point((random.randint(0,width),random.randint(0,height)),fill=get_random_color())
#
# for i in range(10):
# x1=random.randint(0,width)
# x2=random.randint(0,width)
# y1=random.randint(0,height)
# y2=random.randint(0,height)
# draw.line((x1,y1,x2,y2),fill=get_random_color())
# for i in range(40):
# 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())
f=BytesIO()
image.save(f, "png")
data=f.getvalue()
print(valid_code_str)
# 将验证码存放在session里
request.session["valid_code_str"]=valid_code_str
'''
1、set_cookie("sessionID","asdasdas4jkasdj雍熙i3fsdffdew9")
2、在django-session表中插入一条记录
session-key session-data
asdasdas4jkasdj雍熙i3fsdffdew9 {"valid_code_str":"56756"}
"asd32a84jkasdj豪华i31278fdew9" {"valid_code_str":"ABCDE"}
'''
return HttpResponse(data)
将验证码保存到seesion后 通过登录来获取并校验
def log_in(request):
if request.is_ajax():
user=request.POST.get("username")
pwd=request.POST.get("password")
valid_code=request.POST.get("valid_code")
valid_code_str=request.session.get("valid_code_str")
'''
1、random_id=request.COOKIE["sessionID"]
2、 in django-session表中查询记录
session-key session-data
"asd32874jkasdj雍熙i31278fdew9" {"valid_code_str":"12345"}
"asd32a84jkasdj豪华i31278fdew9" {"valid_code_str":"ABCDE"}
django-session.objects.filter(session-key=random_id).values("session-data")
'''
loginResponse={"user":None,"error_msg":""}
if valid_code_str.upper()==valid_code.upper():
user=auth.authenticate(username=user,password=pwd)
if user:
auth.login(request,user) # 设置session
loginResponse["user"]=user.username
else:
loginResponse["error_msg"]="username or password error"
else:
loginResponse["error_msg"]="valid code error!"
return JsonResponse(loginResponse)
return render(request,"login.html")