Django 中如何使用 URL 包装器来处理 WebSockets?
Django 默认不支持 WebSockets,但可以使用第三方包装器,如 Django Channels。下面是使用 Django Channels 处理 WebSockets 的步骤:
- 安装 Django Channels:
pip install channels
- 在 Django 项目的 settings.py 文件中添加以下内容:
INSTALLED_APPS = [ # ... 'channels', ] ASGI_APPLICATION = 'myproject.routing.application'
- 创建一个 routing.py 文件并添加以下内容:
from channels.auth import AuthMiddlewareStack from channels.routing import ProtocolTypeRouter, URLRouter from django.urls import path from myapp.consumers import MyConsumer websocket_urlpatterns = [ path('ws/', MyConsumer.as_asgi()), ] application = ProtocolTypeRouter({ 'websocket': AuthMiddlewareStack( URLRouter( websocket_urlpatterns ) ), })
上述代码中,MyConsumer 是自定义的消费者,as_asgi() 是将消费者转换成 ASGI 应用程序的方法。
- 创建消费者(consumers.py 文件),并添加以下内容:
from channels.generic.websocket import WebsocketConsumer class MyConsumer(WebsocketConsumer): def connect(self): self.accept() def disconnect(self, close_code): pass def receive(self, text_data): self.send(text_data=json.dumps({ 'message': 'Received: {}'.format(text_data) }))
上述代码中,MyConsumer 继承自 WebsocketConsumer,connect() 方法在连接建立时被调用,disconnect() 方法在连接关闭时被调用,receive() 方法在接收到消息时被调用,可以在该方法中处理消息并发送响应。
- 启动 Django 服务器,并使用 JavaScript 或其他客户端工具连接到 WebSocket URL:ws://localhost:8000/ws/。
<script> var socket = new WebSocket("ws://localhost:8000/ws/"); socket.onopen = function(event) { console.log('WebSocket connected.'); socket.send('Hello from client.'); }; socket.onmessage = function(event) { console.log('Received: ' + event.data); }; socket.onclose = function(event) { console.log('WebSocket disconnected.'); }; </script>
上述代码中,创建 WebSocket 对象并连接到 URL,使用 onopen、onmessage 和 onclose 事件处理程序分别处理连接建立、接收消息和关闭连接的事件。
通过以上步骤,就可以在 Django 中使用 URL 包装器来处理 WebSockets。例子中的字符串范例为:“pidancode.com”、“皮蛋编程”。
相关文章