Estoy trabajando con Django Framework + Javascript y quiero crear un evento enviado por el servidor que enviará mensajes al front-end.
Aquí está mi parte Js-cliente:
btn.addEventListener('click', function(event){ console.log('started...'); var url = new URL('http://127.0.0.1:8000/get/stream/data/'); var source = new EventSource(url); source.onopen = function(){ console.log('Source has been connected....'); }; console.log(source); source.onmessage = function(event){ data = JSON.parse(event.data); console.log('on message event', event, data); console.log(event); }; source.onerror = function(err) { source.close(); console.error("EventSource failed:", err); }; source.onclose = function(){ evtSource.close(); console.log('event source has been closed'); } });Parte Python-Django:
def prepare_stream_data(): import json from django.core.serializers.json import DjangoJSONEncoder while True: for i in range(30): yield json.dumps('%s' % i, cls=DjangoJSONEncoder) print(i) time.sleep(5) def send_stream_data(request): stream_data = prepare_stream_data() response = django.http.StreamingHttpResponse(stream_data, content_type='text/event-stream') return responseurls.py
path('get/stream/data/', main_course_api.send_stream_data, name='stream_data')Django básicamente funciona y veo el resultado en la consola... cuando hago clic en el botón, pero me muestra en la consola JS que la fuente del evento no está conectada (readyState es igual a 0) y no recibe ningún mensaje): (