Bonjour,

Je suis actuellement en train de développer une application en Python via le framework Django. Cette application est censée permettre la visualisation de données provenant d'une base de données MongoDB, en temps réel, à l'aide d'un graphique.

Voici le code générant le graphique (en JS), situé dans le template :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<script type="text/javascript">
                var DELAY = 1000; // delay in ms to add new data points
 
                var strategy = document.getElementById('strategy');
 
                // create a graph2d with a (currently empty) dataset
                var container = document.getElementById('visualization');
                var dataset = new vis.DataSet();
 
                var options = {
                    start: vis.moment().add(-30, 'seconds'),
                    end: vis.moment(),
                    dataAxis: {
                        left: {
                            range: {
                                min:68, max: 75
                            }
                        }
                    },
                    drawPoints: {
                        style: 'circle'
                    },
                    shaded: {
                        orientation: 'bottom'
                    }
                };
 
                var graph2d = new vis.Graph2d(container, dataset, options);
 
                function renderStep() {
                    // move the window (you can think of different strategies).
                    var now = vis.moment();
                    var range = graph2d.getWindow();
                    var interval = range.end - range.start;
 
                }
                renderStep();
 
                /**
                 * Add a new datapoint to the graph
                 */
                function addDataPoint() {
                    // add a new data point to the dataset
                    var now = vis.moment();
                    dataset.add({
                        x: now,
                        y: '{{ message.returnValue|replaceForGraph }}'
                    });
 
                    // remove all data points which are no longer visible
                    var range = graph2d.getWindow();
                    var interval = range.end - range.start;
                    var oldIds = dataset.getIds({
                        filter: function (item) {
                            return item.x < range.start - interval;
                        }
                    });
                    dataset.remove(oldIds);
 
                    setTimeout(addDataPoint, DELAY);
                }
                addDataPoint();
            </script>
La variable 'message.returnValue' (ligne 47) représente le message le plus récent dans la base de données. replaceForGraph transforme la virgule du nombre en un point, pour coller au format demandé par vis.js.

Une valeur est générée toutes les secondes mais malgré l'arrivée de nouvelles données dans la base de données, c'est toujours la même valeur qui ressort.


Auriez-vous une idée de comment faire pour actualiser la variable Python qui se trouve dans le code JS ?


Par avance, merci.

StaJR60