Невозможно подключить JS Event Source к бэкенд-серверу Python (Django)
Я работаю с Django Framework + Javascript и хочу создать событие, посылаемое сервером, которое будет отправлять сообщения на front-end.
Вот моя часть Js-клиента:
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');
}
});
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 response
urls.py
path('get/stream/data/', main_course_api.send_stream_data, name='stream_data')
Django в принципе работает и я вижу результат в консоли...., когда я нажимаю на кнопку, но он показывает мне в консоли JS, что источник событий не подключен (readyState равен 0) и не получает никаких сообщений) :(