Traçage de la surveillance en temps réel avec Flask et Vuejs.
Traçage de la surveillance en temps réel avec Flask et Vuejs.
Les données et c'est la visualisation, ce sont certaines de mes choses préférées sur lesquelles travailler. Dans ce tutoriel, je vais parler de la façon de tracer en temps réel des données du côté serveur, ces données peuvent facilement provenir de n'importe quel moteur de base de données, mais par souci de simplicité, elles proviendront d'un CSV.
J'utiliserai Flask avec Pandas côté serveur et Vuejs avec charjs côté client.
Commençons donc par générer nos données factices avec Python à l'aide de la bibliothèque Pandas :
Ce dataframe aura 10000 lignes et ressemble à ceci:
X Y1 Y2 Y3
0 2020-12-30 11:04:54 78 309 485
1 2020-12-30 11:04:55 214 199 484
2 2020-12-30 11:04:56 101 377 18
3 2020-12-30 11:04:57 149 365 134
4 2020-12-30 11:04:58 243 177 203
5 2020-12-30 11:04:59 48 125 57
....
Implémentation côté client.
Configurons le HTML, appelons ce fichier client.html:
Remarque: je ne déclarerai pas de Doctype ou d'en-tête pour le plaisir de ce tutoriel, juste exactement ce dont nous avons besoin.
Notre récipient avec des dimensions acceptables, et en ajoutant la ligne graphique composants prêts à recevoir notre propriété dynamique ChartData :
Importons les bibliothèques:
- Vuejs
- Bibliothèque Charjs
- Notre wrapper Chartjs pour Vuejs
- Ressource Vue
Il est maintenant temps pour notre instance principale de Vue:
PS: Cela pourrait également être fait avec des sockets Web, au lieu d'AJAX.
Pour la première demande, la réponse aura 20 valeurs pour chaque ensemble de données (données) et 20 étiquettes (axe X).
Cela ressemblera à quelque chose comme:
{
"chart_data": {
"datasets": [
{
"backgroundColor": "#483D8B",
"borderColor": "#483D8B",
"borderWidth": 2,
"data": [
32,
112,
102,
...
],
"fill": false,
"label": "name_Y1",
"lineTension": 0,
"pointBorderColor": "#000000",
"pointBorderWidth": 1,
"pointRadius": 2
},
{
"backgroundColor": "#f87979",
"borderColor": "#f87979",
"borderWidth": 2,
"data": [
153,
2,
335,
...
],
"fill": false,
"label": "name_Y2",
"lineTension": 0.23,
"pointBorderColor": "#000000",
"pointBorderWidth": 1,
"pointRadius": 2
},
{
"backgroundColor": "#00BFFF",
"borderColor": "#00BFFF",
"borderWidth": 2,
"data": [
267,
262,
232,
...
],
"fill": false,
"label": "name_Y3",
"lineTension": 0.46,
"pointBorderColor": "#000000",
"pointBorderWidth": 1,
"pointRadius": 2
}
],
"labels": [
"21:33:26",
"21:33:27",
"21:33:28",
...
]
}
}
{
"chart_data": {
"datasets": [
{
"backgroundColor": "#483D8B",
"borderColor": "#483D8B",
"borderWidth": 2,
"data": [
114
],
"fill": false,
"label": "name_Y1",
"lineTension": 0,
"pointBorderColor": "#000000",
"pointBorderWidth": 1,
"pointRadius": 2
},
{
"backgroundColor": "#f87979",
"borderColor": "#f87979",
"borderWidth": 2,
"data": [
430
],
"fill": false,
"label": "name_Y2",
"lineTension": 0.23,
"pointBorderColor": "#000000",
"pointBorderWidth": 1,
"pointRadius": 2
},
{
"backgroundColor": "#00BFFF",
"borderColor": "#00BFFF",
"borderWidth": 2,
"data": [
368
],
"fill": false,
"label": "name_Y3",
"lineTension": 0.46,
"pointBorderColor": "#000000",
"pointBorderWidth": 1,
"pointRadius": 2
}
],
"labels": [
"21:33:46"
]
}
}
Implémentation côté serveur.
Étant donné que la majeure partie de la logique du travail est exécutée côté client, le côté serveur sera moins déroutant et plus simple.
Appelons ce fichier server.py et commençons à importer les bibliothèques dont nous avons besoin:
from flask import Flask, request, jsonify
from flask_cors import CORS
import pandas as pd
- Cors, dans ce cas, parce que nos domaines sont différents, nous devons autoriser CORS
- Pandas
app = Flask(__name__)
CORS(app)
Et nous sommes tous prêts:
Exécutez simplement:
$ python3 server.py
Ensuite, double-cliquez sur le fichier client.html, il devrait ouvrir un navigateur Web.
Quoi qu'il en soit, je sais que le code ici peut être un peu déroutant, alors voici le projet Github .
Commentaires
Enregistrer un commentaire