day73日考

day73日考题

考题

"""
1.img标签src属性可以指代的值有哪些,各有什么特点
2.pillow模块是干什么用的,主要的方法有哪些
3.简述登陆功能图片验证码相关逻辑
4.纯手撸能够生成五位数的随机验证码代码
"""

1.img标签src属性可以指代的值有哪些,各有什么特点

src属性的值,可以是一个图片的路径(url)
也可以是一个网址
也可以是一个二进制文件数据

2.pillow模块是干什么用的,主要的方法有哪些

pillow模块主要是用来生成动态图片的模块
from PIL import Image,ImageDraw,ImageFont

# 生成一个图片
img_obj = Image.new('RGB',(300,400),(12,46,157))
# 创建一个画笔对象
img_draw = ImageDraw.draw(img_obj) # 这样就可以在图片上涂鸦了
# 控制字体的大小以及样式
img_font = ImageFont.truetype('static/111.ttf',36)

3.简述登陆功能图片验证码相关逻辑

前端页面显示一张验证码图片,img标签的src属性是一个url,像后端获取一个图片的二进制数据
后端使用pillow模块生成一张动态图片,并借助io的Bytes.IO内存管理模块临时存一张图片,避免频繁的IO操作
随机生成5为数字字母字符画在随即验证码图片上,
将随即验证码保存在session中,用于登录校验
在前端,通过给url不断加?来刷新图片
$('#code_img').on('click', function () {
        let oldVal = $(this).attr('src');
        $(this).attr('src', oldVal += '?')
})

4.纯手撸能够生成五位数的随机验证码代码

from PIL import Image,ImageDraw,ImageFont

from django.shortcuts import HttpResponse

from io import BytesIO,StringIO

import random

def get_random():
    return random.randint(0,255),random(0,255),random(0,255)

# 生成一个图片对象
img_obj = Image.new('RGB',(200,35),get_random())
# 产生一个画笔对象
img_draw = ImageDraw.draw(img_obj)
# 控制字体的样式以及大小
img_font = ImageFont.truetype('static/11.ttf',36)

code = ''

for i in range(5):
    random_upper = chr(random.randint(65,90))
    random_lower = chr(random.randint(97,122))
    randon_int = str(random.randint(0,9))
    
    # 从三个中随机选一个
    tmp = random.choice([random_upper,random_lower,random_int])
    code += tmp
    #  第一个参数画笔的位置
    #  第二个参数随机字符
    #  第三个参数随机字符的颜色
    #  第四个参数随机字符的样式
    img_draw.text((i*30+30,2),tmp,get_random(),img_font)
# 将随机字符串保存到session中,可以在任意地方拿到它
request.session['code'] = code

"""
内存管理器模块
BytesIO:临时帮你存储数据 返回的时候数据是二进制
"""
io_obj = BytesIO() # 产生一个内存管理器对象,可以看成文件句柄
img_obj.save(io_obj,'jpg') # 第一个参数文件句柄,第二个参数图片格式
return HttpResponse(io_obj.getvalue()) #获取内存管理器中的文件,将其发送给前端
    
原文地址:https://www.cnblogs.com/surpass123/p/13091046.html