• BBS论坛 登录功能


    四、登录功能

    前端页面html代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>BBS论坛</title>
        <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.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>
    </head>
    <body>
    <div class="container-fluid">
        <div class="row">
            <div class="col-lg-4 col-md-offset-4 ">
                <h1 class="text-center">登录</h1>
                <hr>
                {% csrf_token %}
                <div class="form-group">
                    <label for="id_username">用户名</label>
                    <input type="text" id="id_username" name="username" class="form-control">
                </div>
                <div class="form-group">
                    <label for="id_password">密码</label>
                    <input type="password" id="id_password" name="password" class="form-control">
                </div>
                <div class="form-group">
                    <label for="id_code">验证码</label>
                    <div class="row">
                        <div class="col-md-6">
                            <input type="text" class="form-control" id="id_code">
                        </div>
                        <div class="col-md-6">
                            <img src="/get_code/" alt=""  width="200" height="30" id="id_img">
                        </div>
                    </div>
                </div>
                <button class="btn-success btn " id="id_button">登录</button>
                <span  class="errors" style="color: red" id="id_error"></span>
            </div>
        </div>
    </div>
    <script>
         $('#id_img').click(function () {
            // 获取图片src旧的路径
            let oldPath = $(this).attr('src');
            // 修改图片的src属性
            $(this).attr('src',oldPath += '?')
        });
         // ajax发送数据
        $('#id_button').click(function () {
            $.ajax({
                url:'',
                type:'post',
                data:{
                    'username':$('#id_username').val(),
                    'password':$('#id_password').val(),
                    'code':$('#id_code').val(),
                    // 'csrfmiddlewaretoken':$('[name="csrfmiddlewaretoken"]').val(),
                    'csrfmiddlewaretoken':'{{ csrf_token }}',
                },
                success:function (data) {
                    if(data.code === 100){
                        location.href = data.url
                    }else{
                        $('#id_error').html(data.msg)
                    }
                }
            })
        })
    
    </script>
    </body>
    </html>
    login.html

     后端逻辑代码:

    def get_code(requst):
        img_obj = Image.new('RGB', (310, 35), get_random())
        # 生成一个画笔对象
        img_draw = ImageDraw.Draw(img_obj)
        # 生成一个字体对象
        img_font = ImageFont.truetype('static/font/akbar.ttf', 35)
        # 随机验证码:由数字、小写字母、大写字母
        code = ''  # 定义一个变量存储最终验证码
        for i in range(5):
            random_int = str(random.randint(0, 9))
            random_lower = chr(random.randint(97, 122))
            random_upper = chr(random.randint(65, 90))
            temp_code = random.choice([random_int, random_lower, random_upper])
            # 将产生的字一个一个的写到图片上
            img_draw.text((60 + i * 30, 0), temp_code, get_random(), img_font)
            # code记录
            code += temp_code
        print(code)
        # 将code存放到session
        requst.session['code'] = code
        # 生成io对象
        io_obj = BytesIO()
        # 图片模糊
        # img_obj = img_obj.filter(ImaggeFilter.BLUR)
        img_obj.save(io_obj, 'png')
        return HttpResponse(io_obj.getvalue())
    get_code 获取验证码
    def login(request):
        back_dic = {'code': 100, 'msg': ''}
        if request.method == 'POST':
            username = request.POST.get('username')
            password = request.POST.get('password')
            code = request.POST.get('code')
            # 先校验验证码(可以区分大小写,也可以不区分)
            if request.session.get('code').upper() == code.upper():
                user_obj = auth.authenticate(username=username, password=password)
                if user_obj:
                    # 登录成功,记录当前用户状态
                    auth.login(request, user_obj)
                    back_dic['msg'] = '登录成功!'
                    back_dic['url'] = '/home/'
                else:
                    back_dic['code'] = 102
                    back_dic['msg'] = '用户名或密码错误!'
            else:
                back_dic['code'] = 103
                back_dic['msg'] = '验证码错误!'
            return JsonResponse(back_dic)
    
        return render(request, 'login.html')
    login 视图函数

     有可能会有更新......

  • 相关阅读:
    解决一道leetcode算法题的曲折过程及引发的思考
    算法研究:一维多项式求值(秦九韶算法)
    通过HWND获得CWnd指针
    将标题空格替换为 '_' , 并自动复制到剪切板上
    稀疏矩阵操作算法
    微信好友分析之展示好友信息
    微信好友分析之获取好友信息
    爬取当当网的图书信息之结尾
    爬取当当网的图书信息之封装一个工具类
    爬取当当网的图书信息之实体设计
  • 原文地址:https://www.cnblogs.com/xt12321/p/11079597.html
Copyright © 2020-2023  润新知