Это рабочий пример из w3schools в Джанго:
template
<!DOCTYPE html>
<html>
<body>
<h1>Getting server updates</h1>
<div id="result"></div>
<script>
if(typeof(EventSource) !== "undefined") {
var source = new EventSource("stream/");
source.onmessage = function(event) {
document.getElementById("result").innerHTML += event.data + "<br>";
};
} else {
document.getElementById("result").innerHTML = "Sorry, your browser does not support server-sent events...";
}
</script>
</body>
</html>
views
import datetime
from django.http import HttpResponse
def stream(request):
return HttpResponse(
'data: The server time is: %s\n\n' % datetime.datetime.now(),
content_type='text/event-stream'
)
urls
urlpatterns = [
path('stream/', views.stream, name='stream')
]
Обновление:
Если вы хотите управлять своими уведомлениями, вы можете создать модель, например:
from django.db import models
class Notification(models.Model):
text = models.CharField(max_length=200)
user = models.ForeignKey(User, on_delete=models.CASCADE)
sent = models.BooleanField(default=False)
Затем создайте представление, которое ищет первое неотправленное уведомление и отправляет его:
@login_required
def stream(request):
notification = Notification.objects.filter(
sent=False, user=request.user
).first()
text = ''
if notification:
text = notification.text
notification.sent = True
notification.save()
return HttpResponse(
'data: %s\n\n' % text,
content_type='text/event-stream'
)
И функцию send_notification
, которая создает запись в модели Notification
(просто вызовите эту функцию изгде-нибудь в вашем коде):
def send_notification(user, text):
Notification.objects.create(
user=user, text=text
)
Вот и все, просто так.