zoukankan      html  css  js  c++  java
  • 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()) #获取内存管理器中的文件,将其发送给前端
        
    
  • 相关阅读:
    zepto的源代码注释(转)
    关于js的连续赋值
    一道js题
    深入理解setTimeout的作用域
    深入理解setTimeout和setinterval
    webapp之路--apple私有属性apple-touch-icon
    javascript中的原型继承
    webapp之路--百度手机前端经验(转)
    (转)浏览器的渲染原理
    node.js study: cluster
  • 原文地址:https://www.cnblogs.com/surpass123/p/13091046.html
Copyright © 2011-2022 走看看