登陆验证二维码实现

Posted maaosheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了登陆验证二维码实现相关的知识,希望对你有一定的参考价值。

前端Url:

urlpatterns = [

    path(‘admin/‘, admin.site.urls),
url(r‘^login/$‘,views.login),
url(r‘^get_valid_img.png/‘,views.get_valid_img)
]

后端调用的方法:
def get_valid_img(request):
# with open("valid_code.png", "rb") as f:
# data = f.read()
# 自己生成一个图片
from PIL import Image, ImageDraw, ImageFont
import random

# 获取随机颜色的函数
def get_random_color():
return random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)

# 生成一个图片对象
img_obj = Image.new(
‘RGB‘,
(150, 35),
get_random_color()
)
# 在生成的图片上写字符
# 生成一个图片画笔对象
draw_obj = ImageDraw.Draw(img_obj)
# 加载字体文件, 得到一个字体对象
font_obj = ImageFont.truetype("static/font/kumo.ttf", 28)
# 开始生成随机字符串并且写到图片上
tmp_list = []
for i in range(5):
u = chr(random.randint(65, 90)) # 生成大写字母
l = chr(random.randint(97, 122)) # 生成小写字母
n = str(random.randint(0, 9)) # 生成数字,注意要转换成字符串类型

tmp = random.choice([u, l, n])
tmp_list.append(tmp)
draw_obj.text((20+25*i, 0), tmp, fill=get_random_color(), font=font_obj)

print("".join(tmp_list))
print("生成的验证码".center(120, "="))
# 不能保存到全局变量
# global VALID_CODE
# VALID_CODE = "".join(tmp_list)

# 保存到session
request.session["valid_code"] = "".join(tmp_list)
# 加干扰线
# width = 220 # 图片宽度(防止越界)
# height = 35
# for i in range(5):
# x1 = random.randint(0, width)
# x2 = random.randint(0, width)
# y1 = random.randint(0, height)
# y2 = random.randint(0, height)
# draw_obj.line((x1, y1, x2, y2), fill=get_random_color())
#
# # 加干扰点
# for i in range(40):
# draw_obj.point((random.randint(0, width), random.randint(0, height)), fill=get_random_color())
# x = random.randint(0, width)
# y = random.randint(0, height)
# draw_obj.arc((x, y, x+4, y+4), 0, 90, fill=get_random_color())

# 将生成的图片保存在磁盘上
# with open("s10.png", "wb") as f:
# img_obj.save(f, "png")
# # 把刚才生成的图片返回给页面
# with open("s10.png", "rb") as f:
# data = f.read()

# 不需要在硬盘上保存文件,直接在内存中加载就可以
from io import BytesIO
io_obj = BytesIO()
# 将生成的图片数据保存在io对象中
img_obj.save(io_obj, "png")
# 从io对象里面取上一步保存的数据
data = io_obj.getvalue()
return HttpResponse(data)#返回给页面

最后实现的方法:

技术图片

 

 



 

以上是关于登陆验证二维码实现的主要内容,如果未能解决你的问题,请参考以下文章

二维码登陆

python模拟百度登陆

登陆验证码的实现

网页登陆注册(jsp实现)验证码

扫码登陆 之我见

MVC基本登陆与验证码功能实现