BBS論壇 登陸功能

 

4、登陸功能

 

前端頁面html代碼:css

<!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

 後端邏輯代碼: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 視圖函數

 

 

 有可能會有更新......前端

相關文章
相關標籤/搜索