• 二十六 .ajax登录 认证 验证码(session)


    一. ajax 登录 认证 验证码

    https://download.csdn.net/download/baobao267/10722491 Django之Form表单验证及Ajax验证方式汇总
    https://download.csdn.net/download/baobao267/10722491 Django之Form表单验证及Ajax验证方式汇总
    https://blog.csdn.net/HFZeng/article/details/98654307
    https://blog.csdn.net/kkorkk/article/details/80150644
    https://www.jb51.net/article/165394.htm
    https://segmentfault.com/q/1010000009345281
    https://blog.csdn.net/huangql517/article/details/81259011

     templates

    <!DOCTYPE html> <html lang="en"> <head> {% load staticfiles %} <meta charset="UTF-8"> <title>login</title> <link rel="stylesheet" type="text/css" href="{%static 'css/bootstrap.min.css'%}"> <script type="text/javascript" src="{%static 'js/jq.js'%}"></script> </head> <body> <h3 style="text-align: center">登录页面</h3> <div class="container"> <div class="row"> <div class="col-md-8 col-md-offset-2"> <form method="post" action=" "> {% csrf_token %} <div class="form-group"> <label for="user">用户:</label> <input type="text" class="form-control" name="user" id="user"> </div> <div class="form-group"> <label for="pwd">密码:</label> <input type="password" class="form-control" name="pwd" id="pwd"> </div> <div class="form-group"> <label for="#">验证:</label> <div class="row"> <div class="col-md-6"> <input type="text" class="form-control" name="code" id="code"> </div> <div class="col-md-6"> {# <img style="200px;height:37px; border-radius:3px;" src="{%static 'img/11.png'%}">#} <img style="160px;height:35px; border-radius:3px;" src="/get_img/" alt="图片" id="img"> </div> </div> </div> <button class="btn btn-success pull-right" id="login_btn">登录</button> <span class="errs"></span> </form> </div> </div> </div> <script> $("#login_btn").click(function () { var user=$("#user").val(); var pwd=$("#pwd").val(); var code=$("#code").val(); var csl=$("[name='csrfmiddlewaretoken']").val(); $.ajax({ url:"/login/", type:"post", data:{"user":user,"pwd":pwd,"code":code,"csl":csl}, success:function (arg) { console.log(arg,typeof(arg)) if (arg.user){ {#登录成功了#} location.href="www.baidu.com" }else { {#失败#} $(".errs").html(arg.msg_err).css("color","red") } } }); {#<input type="hidden" name="csrfmiddlewaretoken" value="Sr7qsq3Y854eUp0Ef6vq3d7sO0joJmH6IMbU10ZNIrTnVh2WQdd48Nby4uTlo8AH">#} }); {#点击验证码刷新#} $("#img").click(function () { this.src+="?" }); </script> </body> </html>
    views

    from
    django.shortcuts import render,HttpResponse from django.http import JsonResponse import random from django.contrib import auth def login(request): if request.method=="POST": # ===> request.is_ajax(): user=request.POST.get("user") pwd = request.POST.get("pwd") code = request.POST.get("code") print(user,pwd,code,"111111111111") # AJAX请求返回字典 response={"user":None,"msg_err":""} if code.upper()==request.session.get("keep_str").upper(): user_obj=auth.authenticate(username=user,password=pwd) if user_obj: response["user"]=user else: response["msg_err"] = "用户名或者密码错误!!!!" else: response["msg_err"]="验证码错误!!" return JsonResponse(response) else: return render(request, "01html/01login.html") 验证码 def get_img(request): # 方式一:读取指定图片 本地磁盘 # with open("myapp/statics/img/11.png", "rb")as f1: # data=f1.read() # return HttpResponse(data) # 方式二:读取指定图片 基于pollow模块来创建验证码 生成图片 放在本地磁盘 from PIL import Image 在读取图片 # from PIL import Image # def get_random_color(): # 获取图片随机颜色 # return (random.randint(0,255),random.randint(0,255),random.randint(0,255)) # img_png=Image.new("RGB",(350,60),get_random_color()) # f1=open("myapp/statics/img/aa.png","wb") # img_png.save(f1,"png") # with open("myapp/statics/img/aa.png", "rb")as f1: # data=f1.read() # return HttpResponse(data) # 方式三 :生成图片放在内存中 放在内存上 使用内存模块 from io import BinaryIO from PIL import Image,ImageDraw,ImageFont from io import BytesIO def get_random_color(): # 获取图片随机颜色 return (random.randint(0,255),random.randint(0,255),random.randint(0,255)) img_png = Image.new("RGB", (200,38),get_random_color()) # 相当于得到一个画板 draw=ImageDraw.Draw(img_png) # 相当于得到一个画笔 font=ImageFont.truetype("myapp/statics/font/aaa.ttf",25) keep_str="" for i in range(6): random_num=str(random.randint(0,9)) random_lowalf = chr(random.randint(97, 122)) random_upperf = chr(random.randint(65,90)) random_chr=random.choice([random_num,random_lowalf,random_upperf]) draw.text((i*20+40,5), random_chr,get_random_color(),font=font) keep_str+=random_chr # 噪点燥线 width=200 height=38 for i in range(6): 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(20): 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() img_png.save(f,"png") data=f.getvalue() print(keep_str,"1111111111111") # 将验证码存入各自的session中 request.session["keep_str"]=keep_str return HttpResponse(data)
    urls
    from
    django.contrib import admin from django.urls import path from home import index from myapp import views urlpatterns = [ path('admin/', admin.site.urls), path('', index.index), path('login/', views.login), path('get_img/', views.get_img), ]

     2. 随机验证码

    def get_img(request):
        # 方式一:读取指定图片  本地磁盘
        # with open("myapp/statics/img/11.png", "rb")as f1:
        #      data=f1.read()
        #  return HttpResponse(data)
    
    
       # 方式二:读取指定图片 基于pollow模块来创建验证码 生成图片 放在本地磁盘    from PIL import Image 在读取图片
       # from PIL import Image
       # def get_random_color():  # 获取图片随机颜色
       #          return (random.randint(0,255),random.randint(0,255),random.randint(0,255))
       # img_png=Image.new("RGB",(350,60),get_random_color())
       # f1=open("myapp/statics/img/aa.png","wb")
       # img_png.save(f1,"png")
       # with open("myapp/statics/img/aa.png", "rb")as f1:
       #     data=f1.read()
       # return HttpResponse(data)
    
    
       # 方式三 :生成图片放在内存中   放在内存上 使用内存模块  from  io import BinaryIO
        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))
        img_png = Image.new("RGB", (200,38),get_random_color())    # 相当于得到一个画板
        draw=ImageDraw.Draw(img_png)    #  相当于得到一个画笔
        font=ImageFont.truetype("myapp/statics/font/aaa.ttf",25)
        keep_str=""
        for i in range(6):
            random_num=str(random.randint(0,9))
            random_lowalf = chr(random.randint(97, 122))
            random_upperf = chr(random.randint(65,90))
            random_chr=random.choice([random_num,random_lowalf,random_upperf])
            draw.text((i*20+40,5), random_chr,get_random_color(),font=font)
            keep_str+=random_chr
        # 噪点燥线
        width=200
        height=38
        for i in range(6):
            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(20):
            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()
        img_png.save(f,"png")
        data=f.getvalue()
        print(keep_str,"1111111111111")
        # 将验证码存入各自的session中
        request.session["keep_str"]=keep_str
        return HttpResponse(data)


    
    
  • 相关阅读:
    对象属性键值[key]属性问题
    理解 JavaScript 中的 for…of 循环
    vue初学篇----过滤器(filters)
    CSS变量
    SCSS !default默认变量
    vue 集成 NEditor 富文本
    如何在Github上面精准搜索开源项目?
    OSS介绍
    键盘各键对应的编码值(key code)
    网易云音乐歌单生成外链播放器
  • 原文地址:https://www.cnblogs.com/lovershowtime/p/11482222.html
Copyright © 2020-2023  润新知