在 Django 中将参数传递给 websocket

Posted

技术标签:

【中文标题】在 Django 中将参数传递给 websocket【英文标题】:Pass arguments to websocket in Django 【发布时间】:2021-07-16 18:18:32 【问题描述】:

使用 websockets 时,如何将参数从浏览器传递到服务器端? 当浏览器发出 WS 请求时,我想从服务器返回 Hello。应从客户端传递。

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())
]

消费者.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>');

当我这样做时,如何将名称传递给 consumer.py 中的 Hello 类,我应该在 routing.py 中添加一些特殊的东西吗?

【问题讨论】:

【参考方案1】:

要将数据发送到 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 变量,然后将该变量的值更改为您想要的任何值。

【讨论】:

以上是关于在 Django 中将参数传递给 websocket的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django urls.py 中将 url 参数传递给 reverse_lazy

在 Eclipse(Pydev) 中将命令行参数传递给 Python 脚本

如何在 Delphi 2010 中将参数传递给 flash 电影?

在 Swift 中将参数传递给选择器

如何在 Flutter 中将参数传递给动作

如何在谷歌云构建中将参数传递给 docker run