定期更新和渲染Flask中的值

发布于 2021-01-29 19:35:20

我想动态显示我的CPU使用率。我不想重新加载页面以查看新值。我知道如何在Python中获得CPU使用率。现在,我用该值渲染一个模板。如何使用Flask中的值连续更新页面?

@app.route('/show_cpu')
def show_cpu():
    cpu = getCpuLoad()
    return render_template('show_cpu.html', cpu=cpu)
关注者
0
被浏览
41
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    使用Ajax请求

    Python

    @app.route('/_stuff', methods= ['GET'])
    def stuff():
        cpu=round(getCpuLoad())
        ram=round(getVmem())
        disk=round(getDisk())
        return jsonify(cpu=cpu, ram=ram, disk=disk)
    

    Javascript

    function update_values() {
                $SCRIPT_ROOT = {{ request.script_root|tojson|safe }};
                $.getJSON($SCRIPT_ROOT+"/_stuff",
                    function(data) {
                        $("#cpuload").text(data.cpu+" %")
                        $("#ram").text(data.ram+" %")
                        $("#disk").text(data.disk+" %")
                    });
            }
    

    使用Websockets

    project/app/views/request/websockets.py

    # -*- coding: utf-8 -*-
    
    # OS Imports
    import json
    
    # Local Imports
    from app import sockets
    from app.functions import get_cpu_load, get_disk_usage, get_vmem
    
    @sockets.route('/_socket_system')
    def socket_system(ws):
        """
        Returns the system informations, JSON Format
        CPU, RAM, and Disk Usage
        """
        while True:
            message = ws.receive()
            if message == "update":
                cpu = round(get_cpu_load())
                ram = round(get_vmem())
                disk = round(get_disk_usage())
                ws.send(json.dumps(dict(received=message, cpu=cpu, ram=ram, disk=disk)))
            else:
                ws.send(json.dumps(dict(received=message)))
    

    project/app/__init__.py

    # -*- coding: utf-8 -*-
    from flask import Flask
    from flask_sockets import Sockets
    
    
    app = Flask(__name__)
    sockets = Sockets(app)
    app.config.from_object('config')
    from app import views
    

    使用Flask-Websockets使我的生活更加轻松。这是启动器: launchwithsockets.sh

    #!/bin/sh
    
    gunicorn -k flask_sockets.worker app:app
    

    最后,这是客户端代码:
    custom.js
    该代码太长了,所以就在这里。
    请注意,我没有使用socket.io之类的东西,这就是代码很长的原因。此代码还尝试定期重新连接到服务器,并且可以停止尝试通过用户操作重新连接。我使用Messenger库来通知用户出现问题。当然,这比使用socket.io要复杂一些,但是我真的很喜欢对客户端进行编码。




知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看