python-Web-django-图形验证


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): # 方式1: # with open("lufei.jpg","rb") as f: # data=f.read() # 方式2: # pip install pillow # from PIL import Image # img=Image.new("RGB",(270,40),color=get_random_color()) # # with open("validCode.png","wb") as f: # img.save(f,"png") # # with open("validCode.png","rb") as f: # data=f.read() # 方式3: # from PIL import Image # from io import BytesIO # # img=Image.new("RGB",(270,40),color=get_random_color()) # f=BytesIO() # img.save(f,"png") # data=f.getvalue() # 方式4: from PIL import Image, ImageDraw, ImageFont from io import BytesIO import random img = Image.new("RGB", (270, 40), color=get_random_color())#生成一个宽270*高40的画布,背景颜色随机 draw = ImageDraw.Draw(img)#进行绘画 kumo_font = ImageFont.truetype("../static/font/ahronbd.ttf", size=42)#字体 字体大小 valid_code_str = "" for i in range(4): random_num = str(random.randint(0, 9))#0-9的随机数 9 random_low_alpha = chr(random.randint(97, 122))#a 到 z 随机的一个小写字母 b random_upper_alpha = chr(random.randint(65, 90))#A 到 Z 随机的一个大写字母 Q random_char = random.choice([random_num, random_low_alpha, random_upper_alpha]) #2 draw.text((i * 50 + 20, 5), random_char, get_random_color(), font=kumo_font) #往长方形上写字 # 保存验证码字符串 valid_code_str += random_char #85656 # width=270 height=40 # for i in range(10): # x1=random.randint(0,width) # y1=random.randint(0,height) # x2=random.randint(0,width) # y2=random.randint(0,height) # draw.line((x1,y1,x2,y2),fill=get_random_color()) #画线 # # for i in range(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.upper() ''' 1 sdajsdq33asdasd 2 COOKIE {"sessionid":sdajsdq33asdasd} 3 django-session session-key session-data sdajsdq33asdasd {"valid_code_str":"12345"} ''' f = BytesIO() img.save(f, "png") #png data = f.getvalue() return data

 views:

from django.shortcuts import render,HttpResponse,redirect
import json
from app01.models import *

def login(request):
    ''''''
    res = {'s': None, 'info': None}
    if request.method == 'POST':
        print(request.POST)
        username = request.POST.get('LoginName')
        pwd = request.POST.get('Password')
        code = request.POST.get('code')
        code = code.upper()
        if code != request.session['valid_code_str']:
            '''验证码输入错误'''
            res['s'] = 0
            res['info'] = '验证码输入错误'
            print(res)
            return HttpResponse(json.dumps(res))

        manage_obj = Manage.objects.filter(name=username, pwd=pwd).first()
        print(manage_obj)
        if not manage_obj:
            res['s'] = 0
            res['info'] = '登陆失败'
            print(2)
            print(res)
            return HttpResponse(json.dumps(res))
        request.session['manage_name'] = manage_obj.name
        request.session['manage_id'] = manage_obj.id
        print(3)
        res['s'] = 1
        res['info'] = '登陆成功'
        print(2)
        print(res)
        return HttpResponse(json.dumps(res))

    return render(request,'index/login.html',locals())

def login2(request):
    '''图像码'''
    from app01.utils import validCode
    vc = validCode.get_valid_code_img(request)
    print(request.session['valid_code_str'])
    return HttpResponse(vc, 'image/png')


from back.views.ddff import ddff
@ddff
def out(request):
    '''退出'''
    a = 'User, you have successfully quit, welcome to use next time'
    del request.session['manage_name']
    del request.session['manage_id']
    return render(request, 'index/login.html', locals())

html:

<form action="" method="post">
                {% csrf_token %}
                    <ul>
            <li><input name="LoginName" type="text" class="loginuser" placeholder="admin"/></li>
            <li><input name="Password" type="text" class="loginpwd" placeholder="密码"/></li>
            <li class="yzm" style="width:230px;height:60px ;">
                <span><input name="code" type="text" placeholder="验证码"/><img width="115" height="46" id="valid_code_img" src="/back/login/login2/" alt="" onclick="this.src='/back/login/login2/?'+Math.random()" style="position: absolute;"></span>

            </li>

            <li>
                <input id="submitBtn" type="button" class="loginbtn" value="登录"/>
                <label><input name="" type="checkbox" value="" checked="checked" />记住密码</label>
{#                <label><a href="#">忘记密码?</a></label>#}
            </li>
        </ul>
            </form>

<script>
    $(document).ready(function () {
        $("#submitBtn").click( function () {
            // 点击事件
            $.post("/back/login/login/",$('form').serialize() , function (data) {
                //LoginName,Password,code
                if (data['s'] == 1) {
                    layer.msg("登录成功!");
                    // 跳转主页面
                    location.href="{% url 'back:index/index/' %}";
                } else {
                    //登陆失败
                    layer.msg(data['info']);
                }
                return false;
                }, "json");

        })
    })
</script>

 

转载于:https://www.cnblogs.com/person1-0-1/p/11318972.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值