将参数传递给 Django 中的 websocket

Pass arguments to websocket in Django

使用 websockets 时,如何从浏览器向服务器端传递参数? 我想 return 你好,当浏览器发出 WS 请求时来自服务器。应从客户端传递。


JavaScript 运行 在浏览器中。

var socket = new WebSocket('ws://<IP>:80/ws/hello/');
        socket.onmessage = function(event){
        var data = JSON.parse(event.data);
         console.log(data);
}

routing.py

from django.urls import path
from .consumers import *

ws_urlpatterns = [
    path('ws/hello/', Hello.as_asgi())
]

consumers.py

from channels.generic.websocket import WebsocketConsumer
class Hello(WebsocketConsumer):
    def connect(self):
        self.accept()
        self.send(json.dumps({'message':"Hello, <NAME>!"}))

如何将 NAME 替换为客户的姓名?

我可以在 JavaScript 代码中使用

var socket = new WebSocket('ws://<IP>:80/ws/hello/?<NAME>');

当我这样做时,如何将名称传递给 consumers.py 中的 Hello class 以及我是否应该在 routing.py 中添加一些特殊的东西?

要将数据发送到 websocket 服务器,您要使用 socket.send('string to send')

参见:https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications#sending_data_to_the_server

无需编辑 websocket 连接 URI。

要更改 NAME,只需将字符串的该部分设为 python 变量,然后将该变量的值更改为您想要的值即可。