zoukankan      html  css  js  c++  java
  • 登陆验证码

    带验证码的登陆页面:

    login页面:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Title</title>
    
        <script src="/static/dist/js/jquery-3.1.1.js"></script>
        <script src="/static/dist/js/bootstrap.js"></script>
    
        <link rel="stylesheet" href="/static/dist/css/bootstrap.css">
    
        <link rel="stylesheet" href="/static/css/login.css">
    </head>
    <body>
    
    
    
    <div class="container">
        <div class="row">
            <div class="col-md-5 col-md-offset-3">
                <form>
                          {% csrf_token %}
                          <div class="form-group">
                            <label for="username">用户名</label>
                            <input type="text" class="form-control" id="username" placeholder="username">
                          </div>
                          <div class="form-group">
                            <label for="password">密码</label>
                            <input type="password" class="form-control" id="password" placeholder="password">
                          </div>
    
                          <div class="row validCode">
                              <div class="col-md-6">
                                   <div class="form-group">
                                    <label for="validCode">验证码</label>
                                    <input type="text" class="form-control validCode_text" id="validCode" placeholder="validCode">
                                  </div>
                              </div>
    
                              <div class="col-md-6">
                                  <img class="validCode_img" src="/get_validCode_img/" alt="" width="200px" height="50px">
                              </div>
                          </div>
    
    
                        <input type="button" value="submit" class="btn btn-primary" id="subBtn"><span class="error"></span>
                    </form>
            </div>
        </div>
    </div>
    
    
    
    <script>
    
       $("#subBtn").click(function () {
    
           $.ajax({
               url:"/login/",
               type:"POST",
               data:{
                   "username":$("#username").val(),
                   "password":$("#password").val(),
                   "validCode":$("#validCode").val(),
                   "csrfmiddlewaretoken":$("[name='csrfmiddlewaretoken']").val(),
               },
               success:function (data) {
                   console.log(data);
    
                   var response=JSON.parse(data);
                   if (response["is_login"]){
                       location.href="/index/"
                   }
                   else {
                        $(".error").html(response["error_msg"]).css("color","red")
                   }
               }
           })
    
    
    
       })
    
    </script>
    
    
    
    </body>
    </html>
    html

    views页面:

    from django.shortcuts import render,HttpResponse,redirect
    
    from django import forms
    # Create your views here.
    from blog.forms import  *
    from blogCMS import settings
    
    from django.contrib import auth
    
    def login(request):#登陆页面
    
        # if request.is_ajax():
    
        if request.is_ajax():
    
            username=request.POST.get("username")
            password=request.POST.get("password")
            validCode=request.POST.get("validCode")
    
    
            login_response={"is_login":False,"error_msg":None}
            if validCode.upper()==request.session.get("keepValidCode").upper():
                user=auth.authenticate(username=username,password=password)
                if user:
                    login_response["is_login"]=True
                    auth.login(request,user) #  session   request.session[is_login]=True
    
                else:
                    login_response["error_msg"] = "username or password error"
    
            else:
                login_response["error_msg"]='validCode error'
    
            import json
    
            return HttpResponse(json.dumps(login_response))
    
    
        return render(request,"login.html")
    
    
    def get_validCode_img(request):#生成验证码的
    
    
        # 方式1:
        # import os
        # path= os.path.join(settings.BASE_DIR,"blog","static","img","egon.jpg")
        #
        # with open(path,"rb") as f:
        #     data=f.read()
    
        # 方式2:
        # from  PIL import Image
        #
        # img=Image.new(mode="RGB",size=(120,40),color="green")
        #
        # f=open("validCode.png","wb")
        # img.save(f,"png")
        #
        # with open("validCode.png","rb") as f:
        #     data=f.read()
    
        # 方式3:
        # from io import BytesIO
        #
        # from PIL import Image
        # img = Image.new(mode="RGB", size=(120, 40), color="blue")
        # f=BytesIO()
        # img.save(f,"png")
        # data=f.getvalue()
        # return HttpResponse(data)
    
        # 方式4 :
    
        from io import BytesIO
        import random
    
        from PIL import Image,ImageDraw,ImageFont
        img = Image.new(mode="RGB", size=(120, 40), color=(random.randint(0,255),random.randint(0,255),random.randint(0,255)))
    
        draw=ImageDraw.Draw(img,"RGB")
        font=ImageFont.truetype("blog/static/font/kumo.ttf",25)
    
        valid_list=[]
        for i in range(5):
    
            random_num=str(random.randint(0,9))
            random_lower_zimu=chr(random.randint(65,90))
            random_upper_zimu=chr(random.randint(97,122))
    
            random_char=random.choice([random_num,random_lower_zimu,random_upper_zimu])
            draw.text([5+i*24,10],random_char,(random.randint(0,255),random.randint(0,255),random.randint(0,255)),font=font)
            valid_list.append(random_char)
    
    
        f=BytesIO()
        img.save(f,"png")
        data=f.getvalue()
    
        valid_str="".join(valid_list)
        print(valid_str)
    
        request.session["keepValidCode"]=valid_str
    
        return HttpResponse(data)
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        return HttpResponse(data)
    
    
    def index(request):#登陆页面
        if not request.user.is_authenticated():
            return redirect("/login/")
    
    
        return render(request,"index.html")
    
    def log_out(request):#注销登陆
        auth.logout(request)
    
        return redirect("/login/")
    
    
    def article(request):
    
        return render(request,"article.html")
    View Code

    注:可以在页面上用找出是谁登陆的

    <h1>{{ request.user.username }}</h1>这个是在模板渲染里用
  • 相关阅读:
    【转】浅谈Node.js单线程模型
    进程
    网络编程:tcp、udp、socket、struct、socketserver
    Python基础练习
    面向对象:其他双下方法
    isinstance、issubclass、反射
    面向对象:__getitem__、__setitem__、__delitem__
    面向对象:classmethod、staticmethod、property
    面向对象:继承、多态、封装
    异常处理
  • 原文地址:https://www.cnblogs.com/1a2a/p/7868337.html
Copyright © 2011-2022 走看看