This commit is contained in:
2025-07-15 19:54:59 +08:00
parent 31cacb776f
commit 8701c60a17
11 changed files with 43 additions and 21 deletions

View File

@@ -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))
),
}
)

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

0
chat/__init__.py Normal file
View File

0
chat/api.py Normal file
View File

6
chat/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class ChatConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'chat'

17
chat/consumers.py Normal file
View File

@@ -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}))

View File

3
chat/models.py Normal file
View File

@@ -0,0 +1,3 @@
from django.db import models
# Create your models here.

6
chat/url.py Normal file
View File

@@ -0,0 +1,6 @@
from django.urls import path
from .consumers import ChatConsumer
websocket_urlpatterns = [
path("ws/chat/", ChatConsumer.as_asgi()),
]