django-随机生成验证码,视图函数

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")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值