Django视图中的WebSocket处理

2023-04-11 00:00:00 django websocket 视图

在Django视图中处理WebSocket需要使用第三方库,比较流行的有django-socketio和django-channels。这里以django-socketio为例进行介绍。首先需要安装django-socketio库,可以使用pip命令进行安装。

pip install django-socketio

在Django的urls.py文件中需要添加如下代码:

from django_socketio import events

urlpatterns = [
    # ...
    (r'^socket\.io/', include(events.urls)),
]

接下来在视图中导入socketio库,创建一个函数用于处理WebSocket请求,这个函数需要使用@events.on_message装饰器进行修饰,并且需要使用sender参数指定websocket。

from django_socketio import events
from django.shortcuts import render

def index(request):
    return render(request, 'index.html')

@events.on_message(channel="websocket")
def my_message_handler(request, socket_id, message):
    print("收到来自客户端的消息", message)
    # 向客户端发送消息
    request.socket.send("服务器收到消息:{}".format(message))

以上代码中,index函数返回一个HTML页面,这个页面中包含了WebSocket相关的JS代码,建议使用前端JS库socket.io-client。

<!DOCTYPE html>
<html>
  <head>
    <script src="https://code.jquery.com/jquery-1.11.1.js"></script>
    <script src="/static/socket.io.js"></script> <!-- socket.io-client.js 的路径 -->
    <script>
      $(function() {
        // 连接 WebSocket
        var socket = io.connect('http://' + document.domain + ':' + location.port + '/websocket');
        // 发送消息
        socket.send("pidancode.com");
        // 接收消息
        socket.on('message', function(msg) {
          alert(msg);
        });
      });
    </script>
  </head>
  <body>
    <h1>WebSocket Demo</h1>
  </body>
</html>

以上代码中,socket.send发送一个字符串“pidancode.com”,在Python的视图函数中会收到该消息,并向客户端发送一条消息,客户端使用socket.on监听到这条消息并弹出一个alert框。

相关文章