From 8701c60a171e1507419238338c70bd642ed0d730 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Tue, 15 Jul 2025 19:54:59 +0800 Subject: [PATCH] debug5 --- api/asgi.py | 10 +++++++--- api/settings.py | 3 ++- api/urls.py | 8 ++------ api/ws.py | 11 ----------- chat/__init__.py | 0 chat/api.py | 0 chat/apps.py | 6 ++++++ chat/consumers.py | 17 +++++++++++++++++ chat/migrations/__init__.py | 0 chat/models.py | 3 +++ chat/url.py | 6 ++++++ 11 files changed, 43 insertions(+), 21 deletions(-) delete mode 100644 api/ws.py create mode 100644 chat/__init__.py create mode 100644 chat/api.py create mode 100644 chat/apps.py create mode 100644 chat/consumers.py create mode 100644 chat/migrations/__init__.py create mode 100644 chat/models.py create mode 100644 chat/url.py diff --git a/api/asgi.py b/api/asgi.py index dfffec8..75649d6 100644 --- a/api/asgi.py +++ b/api/asgi.py @@ -10,15 +10,19 @@ https://docs.djangoproject.com/en/5.1/howto/deployment/asgi/ import os from channels.routing import ProtocolTypeRouter, URLRouter -# from channels.auth import AuthMiddlewareStack +from channels.auth import AuthMiddlewareStack +from channels.security.websocket import AllowedHostsOriginValidator + from django.core.asgi import get_asgi_application -# from .urls import ws_urlpatterns +from chat.url import websocket_urlpatterns os.environ.setdefault("DJANGO_SETTINGS_MODULE", "api.settings") application = ProtocolTypeRouter( { "http": get_asgi_application(), - # "websocket": AuthMiddlewareStack(URLRouter(ws_urlpatterns)), + "websocket": AllowedHostsOriginValidator( + AuthMiddlewareStack(URLRouter(websocket_urlpatterns)) + ), } ) diff --git a/api/settings.py b/api/settings.py index c1042dd..e94a984 100644 --- a/api/settings.py +++ b/api/settings.py @@ -54,6 +54,7 @@ INSTALLED_APPS = [ "account", "task", "submission", + "chat", ] MIDDLEWARE = [ @@ -86,7 +87,7 @@ TEMPLATES = [ ] WSGI_APPLICATION = "api.wsgi.application" - +ASGI_APPLICATION = "api.asgi.application" # Database # https://docs.djangoproject.com/en/5.1/ref/settings/#databases diff --git a/api/urls.py b/api/urls.py index 80dbc34..f1091a6 100644 --- a/api/urls.py +++ b/api/urls.py @@ -20,7 +20,7 @@ from django.urls import path from django.conf import settings from django.conf.urls.static import static from ninja import NinjaAPI -from .ws import Consumer +from chat.consumers import Consumer api = NinjaAPI() @@ -35,8 +35,4 @@ apis = [ path("api/", api.urls), ] -urlpatterns = apis + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) - -ws_urlpatterns = [ - path("ws/", Consumer.as_asgi()), -] +urlpatterns = apis + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) \ No newline at end of file diff --git a/api/ws.py b/api/ws.py deleted file mode 100644 index 0b6eae2..0000000 --- a/api/ws.py +++ /dev/null @@ -1,11 +0,0 @@ -from channels.generic.websocket import AsyncWebsocketConsumer - -class Consumer(AsyncWebsocketConsumer): - async def connect(self): - await self.accept() - - async def disconnect(self): - pass - - async def receive(self, text_data): - await self.send(text_data=text_data) diff --git a/chat/__init__.py b/chat/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/chat/api.py b/chat/api.py new file mode 100644 index 0000000..e69de29 diff --git a/chat/apps.py b/chat/apps.py new file mode 100644 index 0000000..2fe899a --- /dev/null +++ b/chat/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ChatConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'chat' diff --git a/chat/consumers.py b/chat/consumers.py new file mode 100644 index 0000000..14a2a73 --- /dev/null +++ b/chat/consumers.py @@ -0,0 +1,17 @@ +import json + +from channels.generic.websocket import WebsocketConsumer + + +class ChatConsumer(WebsocketConsumer): + def connect(self): + self.accept() + + def disconnect(self, close_code): + pass + + def receive(self, text_data): + text_data_json = json.loads(text_data) + message = text_data_json["message"] + + self.send(text_data=json.dumps({"message": message})) diff --git a/chat/migrations/__init__.py b/chat/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/chat/models.py b/chat/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/chat/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/chat/url.py b/chat/url.py new file mode 100644 index 0000000..0c77274 --- /dev/null +++ b/chat/url.py @@ -0,0 +1,6 @@ +from django.urls import path +from .consumers import ChatConsumer + +websocket_urlpatterns = [ + path("ws/chat/", ChatConsumer.as_asgi()), +]