• 博客系统-登录注册


    url配置

    from django.conf.urls import url,include
    from django.contrib import admin
    from blogCMS import settings
    from django.views.static import serve
    
    from blog import views
    from blog import urls
    urlpatterns = [
        url(r'^login/', views.login),
        url(r'^log_out/', views.log_out),
        url(r'^reg/', views.reg),
    ]

    登录相关

    视图

    def login(request):
        if request.method=="POST":
            print("====可以走过来")
            username = request.POST.get("username")
            password = request.POST.get("password")
            validCode = request.POST.get("valid_code")
    
            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)
    
                    # request.session["username"] = username
                else:
                    login_response["error_msg"]="用户名或密码错误"   #验证不通过
            else:
                login_response["error_msg"]="验证码输入有误"         #验证码错误
            import json
            return HttpResponse(json.dumps(login_response))
        else:
            # print(request.session["keepValidCode"])
            return render(request,"login.html")

    前端HTML

    {#<!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/jquery/jquery-3.2.1.min.js"></script>
    
        <script src="/static/jquery/jquery.session.js"></script>
        <link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.min.css">
        <script src="/static/bootstrap-3.3.7/js/bootstrap.min.js"></script>
        <!-- 为使用方便,直接使用jquery.js库,如您代码中不需要,可以去掉 -->
        <script src="http://code.jquery.com/jquery-1.12.3.min.js"></script>
        <!-- 引入封装了failback的接口--initGeetest -->
        <script src="http://static.geetest.com/static/tools/gt.js"></script>
    </head>
    <style></style>
    <body>
    
    <div class="container" style="margin-top: 100px">
        <div class="row">
            <div class="col-md-6 col-md-offset-3">
                <div class="panel panel-primary">
                    <div class="panel-heading">
                        <h2>欢迎登录</h2>
                    </div>
                    <div class="panel-body">
                        <form class="form-signin" novalidate>
                            {% csrf_token %}
                            <div class="form-group">
                                <label for="username">用户名</label>
                                <input type="text" id="username" class="form-control" placeholder="请输入用户名" required
                                       autofocus>
                            </div>
                            <div class="form-group">
                                <label for="password">密码</label>
                                <input type="password" id="password" class="form-control" placeholder="请输入密码" required
                                       autofocus>
                            </div>
    
                            <div class="row valiCode">
    
                                <div class="col-md-5">
                                    <div class="form-group">
                                        <label for="validCode">验证码</label>
                                        <input type="text" class="form-control validCode_text" id="validCode"
                                               placeholder="请输入右侧验证码">
                                    </div>
                                </div>
                                <div class="col-md-7 ">
    {#                                <a href="">#}
    {#                                    <img class="validCode_img" src="/get_validCode_img/" alt="" width="160px" height="40px" >点击更换验证码#}
    {#                                </a>#}
    
                                        <img class="validCode_img" src="/get_validCode_img/" alt="" width="160px" height="40px" title="点击更换验证码">
    
                                        <div id="popup-captcha"></div>
    
                                    <input type="button" class="ret" style="background: none;border: none" id="fresh" value="看不清,换一张">
                                </div>
    
                            </div>
    
                            <div class="checkbox">
                                <label>
                                    <input type="checkbox" value="remember-me"> 记住密码
                                </label>
    
                                <a href="">忘记密码</a>
                            </div>
                        </form>
                        <div class="col-md-4">
                            <button class="btn  btn-info btn-block" id="subBtn">登录</button>
                            <span class="error"></span>
                        </div>
                        <div class="col-md-4">
                            <button class="btn  btn-success btn-block" id="register">注册</button>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    
    
    
    
    
    <script src="/static/jquery/jquery.cookie.js"></script>
    <script src="/static/blog/login.js"></script>
    <script>
    
    
        var handlerPopup = function (captchaObj) {
            // 成功的回调
            captchaObj.onSuccess(function () {
                var validate = captchaObj.getValidate();
                $.ajax({
                    url: "/pc-geetest/ajax_validate", // 进行二次验证
                    type: "post",
                    dataType: "json",
                    data: {
                        username: $('#username').val(),
                        password: $('#password').val(),
                        csrfmiddlewaretoken:$("[name='csrfmiddlewaretoken']").val(),
                        geetest_challenge: validate.geetest_challenge,
                        geetest_validate: validate.geetest_validate,
                        geetest_seccode: validate.geetest_seccode
                    },
                    success: function (data) {
                        var response = data;
    
                        if (response["is_login"]){
                            if ($.cookie("next_path")){
                            location.href=$.cookie("next_path");
                            alert($.cookie("next_path"))
                                $.removeCookie("next_path","",{ expires: -1 })
                            }
                            else{
                                location.href="/index/"
                            }
                        }else{
                            $(".error").html(response["error_msg"]).css("color","red");
                        }
                    }
                });
            });
            $("#subBtn").click(function () {
                captchaObj.show();
    
            });
            // 将验证码加到id为captcha的元素里
            captchaObj.appendTo("#popup-captcha");
            // 更多接口参考:http://www.geetest.com/install/sections/idx-client-sdk.html
        };
        // 验证开始需要向网站主后台获取id,challenge,success(是否启用failback)
        $.ajax({
            url: "/pc-geetest/register?t=" + (new Date()).getTime(), // 加随机数防止缓存
            type: "get",
            dataType: "json",
            success: function (data) {
                // 使用initGeetest接口
                // 参数1:配置参数
                // 参数2:回调,回调的第一个参数验证码对象,之后可以使用它做appendTo之类的事件
                initGeetest({
                    gt: data.gt,
                    challenge: data.challenge,
                    product: "popup", // 产品形式,包括:float,embed,popup。注意只对PC版验证码有效
                    offline: !data.success // 表示用户后台检测极验服务器是否宕机,一般不需要关注
                    // 更多配置参数请参见:http://www.geetest.com/install/sections/idx-client-sdk.html#config
                }, handlerPopup);
            }
        });
    
    </script>
    
    
    </body>
    </html>

    JS

    $("#register").click(function () {
            location.href="/reg/"
        });
    
    
    //     //url无刷新验证码
        $(".validCode_img").click(function () {
            this.src+="?";
        });
    //

    注册相关

    视图配置

    # 注册
    def reg(request):
        if request.method == "POST":
            print(request.FILES)
            regform = RegForm(request,request.POST,request.FILES)
            # print("=====这里是regform=====")
    
            reg_response = {"user":None,"valid_code":False,"errors":""}
            # print(regform.cleaned_data.get("username"))
            if regform.is_valid():
                print("===this is ===")
                username = regform.cleaned_data.get("username")
                password = regform.cleaned_data.get("password")
    
                obj = models.UserInfo.objects.create_user(username=username,password=password,avatar=request.FILES.get("img","/avatar/default.png"))
                reg_response["user"]=username
                print("======", reg_response["user"])
            else:
                print("===验证不通过====")
                reg_response["errors"]=regform.errors
    
            # return HttpResponse("OK")
            return HttpResponse(json.dumps(reg_response))
    
        regform = RegForm(request)
        return render(request,"reg.html",{"regform":regform})

    HTML相关

    {#<!DOCTYPE html>#}
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="/static/jquery/jquery-3.2.1.min.js"></script>
        <script src="/static/jquery/jquery.cookie.js"></script>
        <link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.min.css">
    </head>
    <style>
    
        .cc {
            margin-top: 10px;
        }
        .avator_div {
            position: relative;
            width: 60px;
            height: 60px;
            cursor: hand;
        }
        .avator_img, .avator_file {
            position: absolute;
            left: 80px;
            top: 0;
            width: 60px;
            height: 60px;
        {#        cursor: hand;#}
    
        }
    
        .avator_file {
            opacity: 0;
        {#        cursor: hand;#}{#        display: none;#}
        }
    
    
    </style>
    <body>
    
    
    {#<img src="/static/img/top.png" style=" 100%;position: fixed;top: 0;left: 0;">#}
    
    <div class="container" style="margin-top: 20px">
        <div class="row">
            <h2>注册页面</h2>
            <hr>
            <div class="col-md-6">
                <form novalidate>
                    {% csrf_token %}
                    <div class="cc">用户名:
                        {{ regform.username }}
                    </div>
    
                    <div class="cc">密码:
                        {{ regform.password }}
                    </div>
    
                    <div class="cc">确认密码:
                        {{ regform.repassword }}
                    </div>
    
                    <div class="cc">邮箱:
                        {{ regform.email }}
                    </div>
    
                    <div class="avator_div cc">
                        <label for="avator">头像:</label>
                        <img src="/static/img/default.png" class="avator_img" id="preScan">
                        <input type="file" id="avator" class="avator_file">
                    </div>
    
    
                    <div class="row valiCode">
                        <div class="col-md-5">
                            <div class="form-group">
                                <label for="validCode">验证码:</label>
                                {{ regform.valid_code }}
                            </div>
                        </div>
                        <div class="col-md-7 " style="margin-top: 20px">
                            <img class="validCode_img" src="/get_validCode_img/" alt="" width="160px" height="40px" >
                        </div>
    
                    </div>
    
                    <button type="button" class="btn btn-success ajax_signUp">点击注册</button>
    
    
                </form>
            </div>
            <div class="col-md-4 col-md-offset-1">
                <img src="/static/img/registersideimg.png" alt="">
            </div>
    
        </div>
    </div>
    
    
    </body>
    
    <script src="/static/blog/register.js"></script>
    
    <script>
    
    
    </script>
    
    
    </html>

    js

    // 注册页面的主要js代码
    
    
        var per_error_arr = [];
    
        $(".ajax_signUp").click(function () {
            var form = new FormData();
            form.append("username",$("[name=username]").val());
            form.append("password",$("[name=password]").val());
            form.append("repassword",$("[name=repassword]").val());
            form.append("email",$("[name=email]").val());
            form.append("valid_code",$("[name=valid_code]").val());
            var fileobj =$("#preScan").next()[0].files[0];
    
            // console.log(fileobj);
    
            $.ajax({
                url: "/reg/",
                type: "POST",
                data: form,
                processData: false,
                contentType: false,
                headers: {"X-CSRFToken": $.cookie('csrftoken')},
                success: function (data) {
    
                    data = JSON.parse(data);
                    if (data["user"]) {
                        alert("OK");
                        location.href="/login/"
                    }
                    else if(data["errors"]){
                        var error_list = data["errors"];
                        console.log("per_error_arr",per_error_arr);
                        $(".Mr_zhang").css("border","").next().remove();
    
                        for (var error in error_list){
                            $div=$("<div>").addClass("row");
    
                           $div_in=$("<div>").addClass("col-md-5").addClass("col-md-offset-9");
    
                           $div.append($div_in);
    
                           console.log($div);
                           if (error=="__all__"){
                                $div_in.text("密码不一致!");
                                $("#id_repeat_password").css("border","2px solid red").after($div);
                           }
    
                           $div_in.text(errors[error]);
                           $("#id_"+error).css("border","2px solid red").addClass("Mr_zhang").after($div);
                        }
                        pre_error_arr=errors_list;
                       console.log("pre_error_arr",pre_error_arr)
                    }
                }
            })
    
        });
    
    
    
        $(".validCode_img").click(function () {
            this.src+="?";
        });
    
    
        $("#avator").change(function () {
            console.log("OK");
            var first_file = $(this)[0].files[0];
            var reader = new FileReader();
            reader.readAsDataURL(first_file);
            reader.onload=function () {
                $("#preScan").attr("src",this.result)
            }
        })

    *注销

    # 注销
    def log_out(request):
        auth.logout(request)
        return redirect("/login/")
  • 相关阅读:
    如何面试你的面试官
    给老婆的一篇文章
    机器学习:选对时机直线超车
    面试技巧:带走面试官的节奏
    微信红包的随机算法是怎样实现的?
    全栈技术导图
    AI时代:推荐引擎正在塑造人类
    冲顶大会APP技术选型及架构设计
    多域名解析及延伸知识点
    在编程中为所欲为[圣诞版]
  • 原文地址:https://www.cnblogs.com/52-qq/p/8669194.html
Copyright © 2020-2023  润新知