django3实现Websocket最简单demo
安装channels之后,
在 setttings.py 的 INSTALLED_APPS 里添加 channels。
注意每个app后面加上逗号。
import os
from channels.routing import ProtocolTypeRouter
from django.core.asgi import get_asgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
application = ProtocolTypeRouter({
"http": get_asgi_application(),
})
ASGI_APPLICATION = "myproject.asgi.application"
4.新建消费者(类似于views,负责接受连接、接收消息等操作)
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
}))
如果不是这样的格式修改 receive 函数即可。
该文件负责定义websocket的连接、接收消息等操作。
# 新建routing.py,填写内容为:
from django.urls import re_path
from . import consumers
websocket_urlpatterns = [
re_path(r'ws/$', consumers.ChatConsumer.as_asgi()),
]
import os
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
from django.core.asgi import get_asgi_application
import backend.routing
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
application = ProtocolTypeRouter({
"http": get_asgi_application(),
"websocket": AuthMiddlewareStack(
URLRouter(
backend.routing.websocket_urlpatterns
)
),
})