Je souhaite afficher dynamiquement l'utilisation de mon processeur. Je ne veux pas recharger la page pour voir une nouvelle valeur. Je sais comment obtenir l'utilisation du processeur en Python. En ce moment, je rend un modèle avec la valeur. Comment puis-je continuellement mettre à jour une page avec une valeur de Flask?
@app.route('/show_cpu')
def show_cpu():
cpu = getCpuLoad()
return render_template('show_cpu.html', cpu=cpu)
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+" %")
});
}
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
L'utilisation de Flask-Websockets m'a beaucoup facilité la vie. Voici le lanceur: launchwithsockets.sh
#!/bin/sh
gunicorn -k flask_sockets.worker app:app
Enfin, voici le code client:custom.js
Le code est un peu trop long, alors le voici.
Notez que je n'utilise PAS des choses comme socket.io, c'est pourquoi le code est long. Ce code essaie également de se reconnecter périodiquement au serveur et peut cesser d'essayer de se reconnecter lors d'une action utilisateur. J'utilise la bibliothèque Messenger pour informer l'utilisateur que quelque chose s'est mal passé. Bien sûr, c'est un peu plus compliqué que d'utiliser socket.io mais j'ai vraiment aimé coder côté client.