01: 实现注册登录功能

Posted 不做大哥好多年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01: 实现注册登录功能相关的知识,希望对你有一定的参考价值。

目录:抽屉项目之js最佳实践

01: 实现注册登录功能

02: 实现发布帖子功能

03: 将帖子展示到页面、点赞

04: 层级评论

目录:

1.1 显示、隐藏 "登录/注册" 菜单     返回顶部

  1、此部分实现下面三个功能

      功能1:未登录时在右上角显示 “登录/注册” 菜单

      功能2:成功登录后隐藏 “登录/注册” 菜单,显示登录用户信息

      功能3:js设置初始化函数:鼠标滑过显示注销功能,检查用户已登录直接显示登录信息,而不是"登录/注册"菜单

                  

  2、相关code

<body>
    <div class="header">
        <div class="w">
            <div class="login_or_register fr">
                <a href="javascript:void(0);" onclick="show_login_reg_frm()">登录 / 注册</a>
            </div>
            <div class="user_info fr">
                <span id="display_name"  {% if is_login %}is_login{% endif %}>{{ user.display_name }}</span>
                <div class="user_menu hide">
                    <a>设置</a>
                    <a onclick="logout()">退出</a>
                </div>
            </div>
        </div>
    </div>
</body>
index.html html页面
<body>
    <script>
        /* 初始化函数 */
        $(function () {
            /* 处理是否登录 */
            if($("#display_name")[0].hasAttribute("is_login")){
                // 已经登录
                $(".login_or_register").addClass("hide");
                $(".user_info").removeClass("hide");
            }else {
                // 未登录
                $(".login_or_register").removeClass("hide");
                $(".user_info").addClass("hide");
            }

            /* 用户菜单是否显示: 鼠标划过就会触发.hover绑定的函数 */
            $("div.user_info").hover(function () {
                show_user_menu(true);
            },function () {
                show_user_menu(false);
            });
        });
    </script>
</body>
index.html js初始化函数
/* 显示登录、注册页面 */
function show_login_reg_frm() {
    $("div.login_reg_frm").removeClass("hide");
    $("div.shelter").removeClass("hide");
}

/* 注销 */
function logout() {
    $.get({
        url: "/app01/logout/",
        dataType: "json",
        success:function (response) {
            if(response.status==\'ok\'){
                window.location.href="/app01/";
            }
        }
    })
}

/* 用户下拉菜单显示开关 */
function show_user_menu(flag) {
    if(flag){
        $("div.user_menu").removeClass("hide");
    }else{
        $("div.user_menu").addClass("hide");
    }
}
base.js
# 注销
def logout(request):
    request.session[\'is_login\'] = False
    request.session[\'current_user\'] = {}
    return HttpResponse(json.dumps({\'status\': \'ok\'}))
views.py

1.2 注册功能     返回顶部

   1、此部分实现以下四个功能

    功能1:提交用户注册信息

    功能2:检查用户名和邮箱是否已注册

    功能3:检查两次密码是否一致

    功能4:创建验证码图片标签

         

  2、功能1提交用户信息

<body>
    <div class="shelter hide">
        <div class="login_reg_frm hide">
            <div class="close_login_reg_frm" onclick="close_login_reg_frm()">×</div>
            <div class="reg_frm fl">
                <h1>注册</h1>
                <form method="post" id="register_frm">
                    <table>
                        <tr>
                            <th>用户名</th>
                            <td><input type="text" id="login_name" name="login_name" onblur="check_exist(this)"></td>
                            <td class="tips"></td>
                        </tr>
                        <tr>
                            <th>邮箱</th>
                            <td><input type="email" id="email" name="email" onblur="check_exist(this)"></td>
                            <td class="tips"></td>
                        </tr>
                        <tr>
                            <th>密码</th>
                            <td><input id="password" type="password" name="password" autocomplete="off" minlength="3"></td>
                            <td class="tips"></td>
                        </tr>
                        <tr>
                            <th>确认密码</th>
                            <td><input id="password2" type="password" name="password2" autocomplete="off" minlength="3" onblur="confirm_password()"></td>
                            <td class="tips"></td>
                        </tr>
                        <tr>
                            <th>验证码</th>
                            <td>
                                <input type="text" id="verify_code" name="verify_code" class="verify_code" maxlength="4" onclick="create_verify_code_img()">
                            </td>
                            <td class="tips"></td>
                        </tr>
                    </table>
                    <div style="position: relative;">
                        <a href="javascript:void(0);" onclick="register(this)">注册</a>
                        <div class="reg_shelter hide"></div>
                    </div>

                    <br>
                    <div class="register_result"></div>
                </form>
            </div>
        </div>
    </div>
</body>
index.html html注册界面
/* 提交用户注册信息 */
function register(ele) {
    // 数据检查
    var check_pass = true;
    var check_list = {
        \'login_name\': \'用户名\',
        \'email\': \'邮箱\',
        \'password\': \'密码\',
        \'password2\': \'确认密码\',
        \'verify_code\': \'验证码\'
    };
    for(var key in check_list){
        var val = $.trim($(\'.reg_frm #\' + key).val());
        if(val.length==0){
            // 如果要检查的input值为空,提醒用户
            check_pass = false;
            $(".reg_frm #" + key).parent().parent().find(\'td:last-child\').text("不能为空");
        }
    }
    if(!check_pass){
        return false;
    }

    // 通过检查后
    var login_name = $.trim($(\'.reg_frm #login_name\').val());
    var email = $.trim($(\'.reg_frm #email\').val());
    var password = $.trim($(\'.reg_frm #password\').val());
    var password2 = $.trim($(\'.reg_frm #password2\').val());
    var verify_code = $.trim($(\'.reg_frm #verify_code\').val());

    // 提交前,先将按钮置为不可点击
    $("div.reg_shelter").removeClass("hide");
    var data = $(\'#register_frm\').serialize();
    console.log(data);
    $.post({
        url: "/app01/register/",
        data: data,
        dataType: "json",
        success: function (response) {
            console.log(response);
            if(response.hasOwnProperty("status")){
                if(response.status==\'ok\'){
                    //console.log("注册成功");
                    $("div.register_result").text("注册成功");
                    setTimeout(function () {
                        $("div.login_reg_frm").addClass("hide");
                        $("div.shelter").addClass("hide");
                    }, 2000);
                }else{
                    $("div.reg_shelter").addClass("hide");
                    $("div.register_result").text(response.msg);
                }
            }else{
                var ul = document.createElement(\'ul\');
                for(var key in response){
                    var li = document.createElement(\'li\');
                    li.innerText = response[key][0].message;
                    ul.appendChild(li);
                }
                $("div.register_result").html(ul.outerHTML);
                $("div.reg_shelter").addClass("hide");
            }
        },
        error: function (xhr) {
            $("div.reg_shelter").addClass("hide");
        }
    });
    reload_verify_code();   // 无论结果如何,都刷新验证码
}
base.js
# 用户注册
def register(request):
    # 注册的URL
    if request.method == \'POST\':
        reg_frm = RegisterFrm(data=request.POST)
        if reg_frm.is_valid():
            cd = reg_frm.cleaned_data
            # 验证码比对
            vcode_from_client = cd.get("verify_code", "")
            vcode_in_session = request.session.get("verify_code")
            if vcode_from_client and vcode_in_session and vcode_from_client.upper() == vcode_in_session.upper():
                # 验证码比对通过
                new_user = reg_frm.save(commit=False)
                password2 = cd.get("password2")
                m = hashlib.md5()
                m.update(password2.encode())
                new_user.password = m.hexdigest()
                new_user.display_name = cd.get("login_name")
                new_user.email = cd.get("email")
                # new_user.last_login = datetime.datetime.now()
                new_user.last_login = timezone.now()
                new_user.last_ip = request.META.get("REMOTE_ADDR")
                new_user.save()
                # request.POST[\'verify_code\'] = ""
                return HttpResponse(json.dumps({\'status\': \'ok\'}))
            return HttpResponse(json.dumps({\'status\': \'fail\', \'msg\': \'验证码不正确\'}))
        else:
            return HttpResponse(reg_frm.errors.as_json())
views.py

  3、功能2检查用户名和邮箱是否已注册

<tr>
    <th>用户名</th>
    <td><input type="text" id="login_name" name="login_name" onblur="check_exist(this)"></td>
    <td class="tips"></td>
</tr>
<tr>
    <th>邮箱</th>
    <td><input type="email" id="email" name="email" onblur="check_exist(this)"></td>
    <td class="tips"></td>
</tr>
index.html 绑定事件
/* 检查用户名和邮箱是否已注册 */
function check_exist(ele) {
    var t = ele.getAttribute("name");
    var v = ele.value;
    v = $.trim(v);
    if(v.length>0){
        $.post({
            url: "/app01/check_exist/",
            data: {"check_type": t, "check_value": v},
            dataType: "json",
            success: function (response) {
                var check_result = "";
                if(response.status==\'ok\'){
                    // 没有重复
                    check_result = "√";
                }else{
                    check_result = "已存在";
                    ele.setAttribute("duplicate", "duplicate");
                }
                $(ele).parent().parent().find(\'td:last-child\').text(check_result);
            }
        });
    }
}
base.js
# 用户注册时,检查提交的数据是否占用
def check_exist(request):
    # 检查是否已存在相同的值
    if request.method == \'POST\':
        check_type = request.POST.get("check_type")
        value = request.POST.get("check_value")
        parameter = {check_type: value}
        count = User.objects.filter(**parameter).count()
        if count > 0:
            return HttpResponse(json.dumps({\'status\': \'fail\', \'msg\': \'exist\'}))
        else:
            return HttpResponse(json.dumps({\'status\': \'ok\'}))
views.py

  4、功能3检查两次密码是否一致

<tr>
    <th>密码</th>
    <td><input id="password" type="password" name="password" autocomplete="off" minlength="3"></td>
    <td class="tips"></td>
</tr>
<tr>
    <th>确认密码</th>
    <td><input id="password2" type="password" name="password2" autocomplete="off" minlength="3" onblur="confirm_password()"></td>
    <td class="tips"></td>
</tr>
index.html 绑定事件
/* 检查两次密码是否一致 */
function confirm_password() {
    if($(\'.reg_frm #password\').val()!=$(\'#password2\').val()){
        $(\'.reg_frm #password2\').parent().parent().find(\'td:last-child\').text("两次密码不一致");
    }else{
        $(\'.reg_frm #password\').parent().parent().find(\'td:last-child\').text("√");
        $(\'.reg_frm #password2\').parent().parent().find(\'td:last-child\').text("√");
    }
}
base.js

  5、功能4创建验证码图片标签 

<tr>
    <th>验证码</th>
    <td>
        <input type="text" id="verify_code" name="verify_code" class="verify_code" maxlength="4" onclick="create_verify_code_img()">
    </td>
    <td class="tips"></td>
</tr>
index.html 绑定事件
/* 创建验证码图片标签 */
function create_verify_code_img() {
    // 创建验证码图片标签,插入到验证码输入框后面
    if(!document.getElementById(\'verify_code_img\')){
        var img = document.createElement(\'img\');
        img.id = \'verify_code_img\';
        img.src = \'/app01/verify_code/\';
        img.className = \'verify_code\';
        img.onclick = reload_verify_code;
        $("input.verify_code").after(img);
    }
}

/* 刷新验证码函数 JAVA实现QQ登录注册修改密码等功能(美化版)

041 用户注册功能01--搭建微服务和数据验证功能

flask实现用户注册和登录功能

网页中的用户登录、注册,怎么制作

Java-web实现用户登录注册功能

使用MVC实现登录注册功能(数据保存到数据库)详细讲解以及代码