需求

  用户在投票的页面可以实时的监测到,投票详情

 

在这里我会通过轮询和长轮询(推荐使用这个,可以减少请求数,实时性也好)的方法来实现

 

基于轮询实现投票系统

大致的思路是前端开启一个定时器每隔10秒定时的向服务器获取投票的结果

from flask import Flask,render_template,request,jsonify


app = Flask(__name__)


USERS = {
    '1':{'name':'贝贝','count':1},
    '2':{'name':'小东北','count':0},
    '3':{'name':'何伟明','count':0},
}

@app.route('/user/list')
def user_list():
    import time
    return render_template('user_list.html',users=USERS)

@app.route('/vote',methods=['POST'])
def vote():
    uid = request.form.get('uid')
    USERS[uid]['count'] += 1
    return "投票成功"

@app.route('/get/vote',methods=['GET'])
def get_vote():

    return jsonify(USERS)


if __name__ == '__main__':
    # app.run(host='192.168.13.253',threaded=True)
    app.run(threaded=True)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        li{
            cursor: pointer;
        }
    </style>
</head>
<body>
    <ul id="userList">
        {% for key,val in users.items() %}
            <li uid="{{key}}">{{val.name}} ({{val.count}})</li>
        {% endfor %}
    </ul>

    <script src="https://cdn.bootcss.com/jquery/3.3.0/jquery.min.js"></script>
    <script>

        $(function () {
            $('#userList').on('dblclick','li',function () {
                var uid = $(this).attr('uid');
                $.ajax({
                    url:'/vote',
                    type:'POST',
                    data:{uid:uid},
                    success:function (arg) {
                        console.log(arg);
                    }
                })
            });

        });


        /*
        获取投票信息
         */
        function get_vote() {
            $.ajax({
                url:'/get/vote',
                type:"GET",
                dataType:'JSON',
                success:function (arg) {
                    $('#userList').empty();
                    $.each(arg,function (k,v) {
                        var li = document.createElement('li');
                        li.setAttribute('uid',k);
                        li.innerText = v.name + "(" + v.count + ')' ;
                        $('#userList').append(li);
                    })

                }
            })
        }


        setInterval(get_vote,3000);

    </script>
</body>
</html>
templates/user_list.html

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-05-22
  • 2021-11-01
  • 2021-12-14
  • 2021-09-05
  • 2021-12-26
猜你喜欢
  • 2022-12-23
  • 2021-11-13
  • 2021-08-09
  • 2021-07-09
  • 2021-06-10
  • 2022-12-23
  • 2021-10-29
相关资源
相似解决方案