Я пытаюсь обновить график Bokeh в Django, когда новые данные поступают через веб-сокет, реализованный с помощью каналов Django.Целью является потоковая передача новых данных, полученных через веб-сокет, без обновления браузера.
My Представление django Создание графика боке :
#in views.py
def sensor(request):
plot = figure(title= 'title' ,
x_axis_label= 'X-Axis',
y_axis_label= 'Y-Axis',
plot_width =900,
plot_height =500
source = ColumnDataSource(data=dict(x=[], y=[]))
plot.line('x', 'y', source=source, legend= 'f(x)', line_width = 2)
script, div = components(plot)
return render(request,"sensor.html",{'div':div,'script':script})
JQuery , связанный с websocket , выглядит следующим образом (я получаю сообщение в виде текста в формате JSON):
//In a script tag in sensor.html
$(function() {
var ws_scheme = window.location.protocol == "https:" ? "wss" : "ws";
var endpoint = ws_scheme + '://' + window.location.host + window.location.pathname
var ws = new WebSocket(endpoint);
ws.onopen = function(e) {
console.log("open", e);
};
ws.onmessage = function(e) {
console.log("message", e);
var new_data = jQuery.parseJSON(e.data).data);
// UPDATE BOKEH ColumnDataSource WITH new_data
};
});
Моя проблема в том, что японятия не имею, как обновить Bokeh ColumnDataSource через JQuery.Самое близкое, что я нашел, - это использование Bokeh CustomJS Callbacks , но я не вижу способа связать их с событием onmessage websocket и получить доступ к данным, собранным с помощью этого события.
Другойя попробовал встроить отдельный сервер Bokeh , но я не могу найти способ обновления графиков с помощью моих веб-сокетов Django Channels.Я также должен был бы передавать данные из моих моделей Django на сервер Bokeh при инициализации графиков, что неудобно.
И помощь / совет будет принята с благодарностью.Спасибо