WebSocket Django и angular

<<<0><>>Я

хочу установить websocket соединение между angular и django, зная, что я уже работал и использовал несколько django api в angular, но теперь мне нужно иметь уведомления в реальном времени, поэтому я загрузил каналы в django и ngx-socket-io в angular, но это не работает Я хотел начать с простого теста, просто чтобы увидеть, если это работает :header. component.ts:50 WebSocket connection to 'ws://127.0.0.1:8000/ws/my-websocket/' failed:<<<1><>>

Я добавил это на бэкенде в настройках :

 WSGI_APPLICATION = 'tutorial.wsgi.application'


ASGI_APPLICATION = 'tutorial.asgi.application'

и ca в asgi.py в корне:

import os
from django.core.asgi import get_asgi_application
from django.urls import path
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter
from quickstart.views import AlertConsumer  
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tutorial.settings')


django_asgi_application = get_asgi_application()


application = ProtocolTypeRouter({
    "http": django_asgi_application,  # Traitez les connexions HTTP avec l'application Django standard
    "websocket": AuthMiddlewareStack(
        URLRouter([
            path('ws/my-websocket/', AlertConsumer.as_asgi()),  # Utilisez le consommateur WebSocket que vous avez défini
        ])
    ),
})

а также это в url моего приложения:

from django.contrib import admin
from django.urls import path
from django.urls import include, path
from rest_framework import routers
from rest_framework.urlpatterns import format_suffix_patterns
from .views import CustomTokenObtainPairView,excel_data_api, EquipementsTotalConsommation, zonesTotalConsommation
from .views import *
from quickstart import views
from django.urls import path, include
from django.contrib.auth import views as auth_views
from django.urls import re_path
from .views import AlertConsumer  # Importez votre consommateur WebSocket

websocket_urlpatterns = [
    re_path(r'ws/my-websocket/', AlertConsumer.as_asgi()),  # Utilisez le consommateur WebSocket que vous avez défini
]
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'profileUser', views.ProfileUserViewSet)
router.register(r'zones', views.ZoneViewSet)   

и вот это в файле views.py в моем приложении:

from channels.generic.websocket import AsyncWebsocketConsumer
import json

class AlertConsumer(AsyncWebsocketConsumer):
    async def connect(self):
        await self.accept()

    async def disconnect(self, close_code):
        pass

    async def receive(self, text_data):
        # Traitez les données reçues du client WebSocket si nécessaire
        pass

    async def send_alert(self, event):
        # Récupérez les données de l'événement
        alert_data = event['data']

        # Envoyez les données au client WebSocket
        await self.send(text_data=json.dumps(alert_data))

class AlerteViewSet(viewsets.ModelViewSet):
    queryset =Alerte.objects.all()
    serializer_class =AlerteSerializer
    def list(self, request, *args, **kwargs):
        alertes = Alerte.objects.all()
        serializer = AlerteSerializer(alertes, many=True)
        return Response(serializer.data)

на стороне angular я создал службу:

import { Injectable } from '@angular/core';
import { WebSocketSubject } from 'rxjs/webSocket';

@Injectable({
  providedIn: 'root'
})
export class WebSocketService {

  private socket$: WebSocketSubject<any>;

  constructor() {
    this.socket$ = new WebSocketSubject('ws://127.0.0.1:8000/ws/my-websocket/');
}

  

  sendMessage(message: any) {
    this.socket$.next(message);
  }

  getMessages() {
    return this.socket$.asObservable();
  }
}

и это в ts-файле в моем компоненте:

  constructor(private webSocketService: WebSocketService,private floorService: FloorService, private router: Router,private translate: TranslateService, private renderer: Renderer2, private el: ElementRef) {
    this.isLoggedIn = localStorage.getItem('isLoggedIn')
  }

  currentSection: string = '';
 
  ngOnInit() {
    this.webSocketService.getMessages().subscribe((message:any) => {
      console.log('New message received: ', message);
    });
Вернуться на верх