ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

1 随机生成验证码-组件

2022-08-12 17:03:29  阅读:236  来源: 互联网

标签:session code get random 验证码 valid randint 组件 随机


1组件代码展示:

from PIL import Image, ImageDraw, ImageFont
from io import BytesIO
import random


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


def get_valid_code_img(request):
    img = Image.new("RGB", (260, 32), color=get_random_color())  # 图片句柄

    draw = ImageDraw.Draw(img)  # 生成画笔
    font_obj = ImageFont.truetype('static/blog/font/aigei_com.ttf', size=20)  # 字体样式的路径

    valid_code_str = ''
    for i in range(1):  # 获取1个字符的验证码
        random_num = str(random.randint(0, 9))  # 生成随机数字
        random_low_alpha = chr(random.randint(95, 122))  # 生成随机小写字母
        random_upper_alpha = chr(random.randint(65, 90))  # 生成随机大写字母
        random_char = random.choice([random_num, random_low_alpha, random_upper_alpha])

        draw.text((i * 50+20, 5), random_char, get_random_color(), font=font_obj)  # 写文件
        # 保存验证码字符串
        valid_code_str += random_char

    # width, height = 260, 40  # 设置图片的宽高
    # for i in range(10):  # 造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(10):  # 造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  # 将验证码存入用户session中
    '''
    session过程:
    1.生成一个随机的字符串 "asdfasdfsfsd"
    2.COOKIE  {'session_id': asdfasdfsfsd}
    3.在django-session表中生成
        session-key    session-data
        asdfasdfsfsd   {"valid_code_str": "xxxx"}
    '''

    f = BytesIO()  # 内存句柄(使用完就会清除掉)
    img.save(f, 'png')
    data = f.getvalue()

    return data

2 组件代码调用:

from django.shortcuts import HttpResponse
from utils.validCode import get_valid_code_img

def get_validCode_img(request):
    data = get_valid_code_img(request)
    return HttpResponse(data)

3 组件效果展示:

image

标签:session,code,get,random,验证码,valid,randint,组件,随机
来源: https://www.cnblogs.com/it-lkp/p/16580623.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有